我对 Scheme 中分配的编程任务有一个小问题。我们的任务是创建一个函数,该函数仅返回满足给定谓词要求的对结构中的值。它们也将以相同的对结构返回,只需删除违规条目即可。到目前为止,我的代码如下
(define (keep-if-all ia pred ls)
(cond
((null? ls) null)
((pair? ls)
(cons
(keep-if-all pred (car ls))
(keep-if-all pred (cdr ls))))
((pred ls) ls)
(else null)))
问题是 else 返回 null 并因此将值替换为 null 而不是删除它。
例如
(keep-if-all odd? (list 1 2 3 (cons 4 4) (list 1 2 3 4 5)))
返回
(1 () 3 (()) (1 () 3 () 5))
而不是想要的
(1 3 () (1 3 5))
朝正确方向戳将不胜感激