2015-11-05 18 views
1

以下代碼刪除了我從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)

+1

作爲一個離題話題,學習Scheme最好的方法是閱讀SICP並完成所有的練習。我現在正在做,而且這真的很有收穫。 –

回答

1

appendlistfoldr版本的明確遞歸與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)) 
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)))))))