2017-04-02 56 views
0

我只是建立一个使用谓词并遍历列表的方案代码。计划 - 谓词获取null

这是代码:

(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? '())它会打印一个错误。

我错过了什么?

回答

1

第一个参数x是列表的当前元素。第二个,y,是累加器。所以在第一次调用x是3并且y'()。所以你没有做(odd? '())(cons '() 3),你在做(odd? 3)(cons 3 '())

+0

你说得对!我只是试图交换和制作(para y),而它给了我一个错误......谢谢! –