我只是构建了一个方案代码,它使用谓词并对列表进行迭代。
这是代码:
(define (filter para lst)
(foldr (lambda (x y)
(if (para x)
(cons x y) y)) '() lst))例如,(filter odd? '(1 2 3))将返回'(1 3)
lamda进入开始'()和3-并使(para x),即(odd? '())和它的工作。
但是如果我写(odd? '()),它会打印一个错误。
我遗漏了什么?
发布于 2017-04-02 14:53:50
第一个参数x是列表的当前元素。第二个,y,是累加器。因此,在第一次调用中,x为3,y为'()。所以你不是在做(odd? '())和(cons '() 3),而是在做(odd? 3)和(cons 3 '())。
https://stackoverflow.com/questions/43169679
复制相似问题