【发布时间】:2011-04-21 07:49:20
【问题描述】:
这是删除列表最后一个元素的函数。
(define (remove-last ll)
(if (null? (cdr ll))
'()
(cons (car ll) (remove-last (cdr ll)))))
所以根据我的理解,如果我们cons 一个列表(例如a b c 带有一个空列表,即'(),我们应该得到
a b c。但是,在交互窗口(DrScheme)中测试,结果是:
如果 (cons '() '(a b c))
(() a b c)
如果 (cons '(a b c) '())
((a b c))
我很喜欢 :(!
然后我回到我的问题,删除所有相邻重复的元素。例如,
(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 的调用,我看不出哪个部分可以生成这个.。有什么想法吗?
谢谢,
【问题讨论】:
标签: scheme