如何在scheme中复制列表?
下面的代码删除了我从abo abo的列表中得到的重复项如何在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)
我刚刚开始学习计划,如何复制列表中的每个项目例如
(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))