Scheme,将lambda作为函数参数传递-需要帮助理解args吗

Scheme,将lambda作为函数参数传递-需要帮助理解args吗,scheme,arguments,Scheme,Arguments,这是一个家庭作业: 返回一个列表,该列表包含满足给定谓词的给定列表的所有元素。比如说, (filter (lambda (x) (< x 5)) '(3 9 5 8 2 4 7)) 这很好,也很有效,但在我使用它之前,我想了解它。“pred”是一个函数,但在本例中,它们将(

这是一个家庭作业:

返回一个列表,该列表包含满足给定谓词的给定列表的所有元素。比如说,

(filter (lambda (x) (< x 5)) '(3 9 5 8 2 4 7)) 
这很好,也很有效,但在我使用它之前,我想了解它。“pred”是一个函数,但在本例中,它们将(
有人能给我解释一下在这个节目中发生了什么吗?我不理解发生的事情背后的逻辑。

是的,您正在调用
过滤器
函数,它的一个参数是
(lambda(x)(
。(还有另一个参数,您的数字列表。)是的,它非常类似于Java中具有单个方法的匿名类。

是的,
lambda
在scheme中定义了一个函数。如果函数没有按名称分配给变量,那么它基本上与匿名函数相同。

其他答案非常正确。此外,如果对您有帮助,此程序的含义相同:

#lang racket

(define (less-than-five x) (< x 5))

(filter less-than-five '(3 9 5 8 2 4 7))
是一种价值;在Java中,方法不是值

编辑:我看到你的问题增加了一堆。你给我留下了深刻的印象 有后续问题,而不是只回答你得到的:)

我认为回答这个问题的最好方法是关注你在 进行函数调用,并使用。。。踏步机

哦,见鬼。我制作了一个视频,并在YouTube上播放:


下面是一个使用谷歌Guava库的Java问题的快速示例:

Iterables.filter(asList(3,9,5,8,2,4,7), new Predicate<Integer>() {

    @Override
    public boolean apply(Integer a) {
        return a < 5;
    }

});
Iterables.filter(asList(3,9,5,8,2,4,7),新谓词(){
@凌驾
公共布尔应用(整数a){
返回a<5;
}
});

我提出它是为了说明Java没有匿名函数,而是匿名类。Java没有作为第一类数据类型的函数。我之所以提出这个问题,是因为如果你参加了一门课程(我想你是),这很可能会在考试中被问到。

只是一个迂腐的笔记。Java没有匿名函数。它有匿名类,通常用于模拟“lambdas”。历史注释:2012年,Java没有匿名函数(也称为“闭包”)。。。但是从Java 8(iirc)开始,它现在是。抱歉,因为我是这里的noob,所以我无法正确地获得格式,所以我将只在回答中发布。我喜欢它,stackoverflow与Khan AcademyTanks在视频中会面,这非常有帮助。
less-than-five
Iterables.filter(asList(3,9,5,8,2,4,7), new Predicate<Integer>() {

    @Override
    public boolean apply(Integer a) {
        return a < 5;
    }

});