首先,如果任何人都可以在已经回答的地方找到问题,请告诉我。我能找到的所有功能都是删除重复项。从列表和子列表中删除成员的方案功能
无论如何,我正在尝试编写一个方案函数(delete V L)
,它将一个值和一个列表作为参数,并从列表及其所有子列表中删除该值。例如,给出下面的输入:
> (deep-delete 3 '(1 2 3 (4 3) 5 (6 (3 7)) 8))
它会产生:
(1 2 (4) 5 (6 (7)) 8)
到目前为止,这是我自己写的,但我知道,if语句(即进行检查,看如果该元素是一个子列表,这意味着它也必须被操作)必须被错误地放置。此外,我无法将自己的大脑包围在我应该使用的位置cons
以及我不应该在的位置,因为我仍然对追踪递归的返回值感到困惑。有人可以看看并解释我做错了什么吗?
(define (delete V L)
(if (list? (car L)) (cons (delete V (car L) (cdr L)))
(cond
((null? L) L)
((equal? V (car L)) (delete V (cdr L)))
(else (cons (car L) (delete V (cdr L))))))))