(define (delete-doubles lst)
(cond ((null? lst) '())
((null? (cdr lst)) (car lst))
((equal? (car lst) (cadr lst)) (delete-doubles (cdr lst)))
(else (cons (car lst) (delete-doubles (cdr lst))))))
这是我制作的代码。它用于在此元素在彼此之后显示两次或更多次时删除列表中的元素。除此之外,代码完全正常:
> (delete-doubles '(1 2 2 3 4 5))
(1 2 3 4 . 5)
我想删除.
,我知道它与cons
有关,但我不知道如何解决它。
提前致谢。
答案 0 :(得分:2)
'(1 2 3)
实际上意味着(cons 1 (cons 2 (cons 3 null)))
'(1 2 . 3)
实际上意味着(cons 1 (cons 2 3)
一些好的测试用例应该能够快速揭示问题。通常,您应该从您能想到的绝对最小的测试用例开始。然后是下一个最小的。然后从那里上去。不要直接跳到一个很好的例子。
答案 1 :(得分:1)
当cdr为null时,你只是返回汽车,而在else行中,你正在做汽车和cdr的递归。这就是你的配对来自哪里。这有帮助吗?
答案 2 :(得分:0)
我保持你的代码不变,得到了这个:
> (delete-doubles '(1))
1
预期输出为(1)。
这意味着您将返回错误的值 list-is-one-element-long-clause。
如果列表中有一个元素,则它已经没有双精度数。 也就是说,在这种情况下你必须返回lst而不是(car lst)。