這是刪除列表的最後一個元素的功能。 。幫助解釋Scheme在計劃中的作用?
(define (remove-last ll)
(if (null? (cdr ll))
'()
(cons (car ll) (remove-last (cdr ll)))))
所以從我的理解,如果我們cons
列表(例如a b c
對空列表,即'()
,我們應該得到 a b c
然而,測試中的交互窗口(DrScheme),其結果是:
如果(利弊 '()'(ABC))
(() a b c)
如果(利弊 '(ABC)'())
((a b c))
我喜歡什麼heck :(! 然後我回到我的問題,刪除所有具有相鄰重複的元素。例如, (a b a a c c)
將是(a b)
。
(define (remove-dup lst)
(cond ((null? lst) '())
((null? (cdr lst)) (car lst))
((equal? (car lst) (car (cdr lst))) (remove-dup (cdr (cdr lst))))
(else (cons (car lst) (car (cdr lst))))
)
)
這是不正確的,但我知道答案有a b
一個.
之間。這怎麼會發生?
`(a . b)`
現在只有一個呼叫cons
在我上面的代碼,我看不出哪一部分可能會產生此.
。任何想法?
感謝,
優雅的答案。萬分感謝 ;) – Chan 2011-04-21 22:57:12