我需要创建一个过滤掉Scheme中谓词的函数。例如(filter-out number? '(a 2 #f b 7))
:输出为(a #f b)
我所拥有的功能会返回已过滤掉的内容列表。我怎样才能改变这个以获得我需要的东西?感谢
(define (filter pred lst)
(reverse (filter-help pred lst '())))
(define (filter-help pred lst res)
(cond ((null? lst) res)
((pred (car lst))
(filter-help pred (cdr lst) (cons (car lst) res)))
(else
(filter-help pred (cdr lst) res))))
答案 0 :(得分:0)
如果您只是在一行filter-help上取消谓词(并按预期将filter
更改为filter-out
),那么您的函数会起作用:
(not (pred (car lst)))
而不是
((pred (car lst))
虽然您可以使用带有lambda函数的内置filter
来更简单地写这个:
(define (alt-filter-out pred lst)
(filter (lambda (x) (not (pred x))) lst))
希望这有帮助!