我一直坚持这个问题。我将谓词和列表传递给方案中的另一个函数。如果谓词为true,则将其添加到答案列表中,否则跳过它。
例如,(myfilt positive? '(1 -2 3))
应为(1 3)
。但我一直在(1 . 0)
。
(define myfilt
(letrec ([testfilt (lambda (x poly function)
(if (empty? poly)
(function '())
(testfilt x (rest poly)
(lambda (v)
(function (if (x (car poly))
(cons (car poly) v)
0))))))]
[identity (lambda (x) x)])
(lambda (x poly)
(testfilt x poly identity))))
答案 0 :(得分:4)
你最内层的if
应该使用v
作为else分支,而不是0.因此:
(if (x (car poly))
(cons (car poly) v)
v)