这是一个家庭作业:
返回一个列表,其中包含给定列表中满足给定谓词的所有元素。例如,
(filter (lambda (x) (< x 5)) '(3 9 5 8 2 4 7))
应该返回 (3 2 4)。
我昨天才开始计划,所以我是一个完整的菜鸟。如果我正确理解此函数函数调用的语法,“过滤器”是函数,“(lambda(x)(< x 5)”是参数。这类似于java中的匿名函数吗?
编辑:
我从另一篇关于 stackoverflow 的帖子中找到了一些代码。他们直接回答了这个问题:这是他们写的:
(define (my-filter pred lst)
(cond ((null? lst) null)
((pred (first lst))
(cons (first lst) (my-filter pred (rest lst))))
(else (my-filter pred (rest lst)))))
这很好,而且有效,但在我使用它之前,我想了解它。“pred”是一个函数,但在这种情况下,它们将 (< x 5) 传递给它,并且它以某种方式接受了这个值。我不明白。
有人可以向我解释一下这个程序期间会发生什么吗?我不明白正在发生的事情背后的逻辑。