以下代码删除了我从abo-abo的answer in this question获得的列表中的副本。
(define (remove-duplicates l)
(cond ((null? l)
'())
((member (car l) (cdr l))
(remove-duplicates (cdr l)))
(else
(cons (car l) (remove-duplicates (cdr l))))))
我刚刚开始学习计划,如何复制列表中的每个项目,例如(5 6 7 8 9 9 10 11 11)
将成为(5 5 6 6 7 7 8 8 9 9 9 9 10 10 11 11 11 11)
?
答案 0 :(得分:1)
如果你有一个列表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)))))))
答案 1 :(得分:1)
append
和list
及foldr
版本与cons
的明确递归:
(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))