作者:小鱼儿r6K2 | 来源:互联网 | 2022-11-26 09:09
我是全新的计划,来自ac #background.
我以为我正在处理lambda,但我不明白为什么这个例子有效:
(let ([f (lambda x x)]) (f 1 2 3 4) )
答案是(1 2 3 4),但是怎么样?这是我没有得到的xx部分.lambda没有参数,因此正文是xx,对吧?但我不知道在这种情况下这意味着什么,有人可以解释一下吗?谢谢.
1> Óscar López..:
事实上,lambda
您的代码中的接收参数和非常多的参数.lambda
没有参数的a的语法是不同的:
(let ([f (lambda () 1)]) (f))
=> 1
问题中的lambda
表达是另外的:
(lambda x x)
它接收一个可变数量的参数作为列表,然后返回它们.你命名了它f
,当它被调用时:
(f 1 2 3 4)
绑定所有参数x
,列表然后x
返回值:
'(1 2 3 4)
所以,f
只不过是一个接收多个参数的身份函数.也许这个答案将阐明如何在Scheme中定义可变函数.为了完整起见,这里是一个lambda
接收单个参数并返回它的示例:
(let ([f (lambda (x) x)]) (f 1))
=> 1
所以你有它,这是我们如何定义lambda
接收0,1或许多参数的s.