如何在scheme中复制列表?

如何在scheme中复制列表?,scheme,Scheme,下面的代码删除了我从abo abo的列表中得到的重复项 我刚刚开始学习计划,如何复制列表中的每个项目例如(5 6 7 9 9 10 11 11)将变成(5 5 6 6 6 7 7 8 8 9 9 9 9 10 11 11 11)?如果您有一个列表l,您可以执行以下操作,在结果列表的开头复制第一个项目 (cons (car l) (cons (car l) (cdr l))) 这将导致以下解决方案: define (duplicate l) (cond ((null? l)

下面的代码删除了我从abo abo的列表中得到的重复项


我刚刚开始学习计划,如何复制列表中的每个项目例如
(5 6 7 9 9 10 11 11)
将变成
(5 5 6 6 6 7 7 8 8 9 9 9 9 10 11 11 11)

如果您有一个列表
l
,您可以执行以下操作,在结果列表的开头复制第一个项目

(cons (car l) (cons (car l) (cdr l)))
这将导致以下解决方案:

define (duplicate l)
  (cond ((null? l)
         '())
        (else
         (cons (car l) (cons (car l) (duplicate (cdr l)))))))

带有
append
list
的显式递归,以及带有
cons
foldr
版本:

(define (dup lst)
  (if (empty? lst)
      '()
      (append (list (car lst) (car lst))
              (dup (cdr lst)))))

(define (dup2 lst)
  (foldr (λ (x xs) (cons x (cons x xs)))
         '()
         lst))

撇开话题不谈,最好的学习方法是阅读SICP并做所有的练习。我现在正在做,这真的很值得。
(define (dup lst)
  (if (empty? lst)
      '()
      (append (list (car lst) (car lst))
              (dup (cdr lst)))))

(define (dup2 lst)
  (foldr (λ (x xs) (cons x (cons x xs)))
         '()
         lst))