這是在構建另一個列表時如何遞歸遍歷列表的最簡單示例之一。你應該自己寫,因爲你正在學習。我會幫你一點與解決方案的總體結構,填補空白:
(define (copy lst)
(if <???> ; is the list empty?
<???> ; if so, return the empty list
(cons <???> ; otherwise `cons` the first element of the list (*)
(copy <???>)))) ; and advance the recursion over the rest of the list
(*)......但如果元素是'cat
,然後利弊的副本。
(copy (cons 'one (cons 'animal (cons 'table (cons 'cat (cons 'bread empty))))))
...這恰好是相同的::
與列表中的問題測試它
(copy '(one animal table cat bread))
無論哪種方式,其結果是輸入列表的副本具有相同的元素(以及每個發現的'cat
的兩個副本),但駐留在新的cons-cells中。
使用的邏輯程序是從SRFI1/R6RS'摺疊'或'摺疊'。 – leppie 2013-02-08 19:32:28
BTW:'(cons'animal(cons'table(cons'cat(cons'bread empty))))'簡單寫成''(動物表貓麪包)' – leppie 2013-02-08 19:33:35
@leppie如果你想要使用'set-car!'或'set-cdr!'。 :-P – 2013-02-08 20:03:41