我是 scheme 的新手,有 c# 背景。
我以为我掌握了 lambda,但我不明白为什么这个例子有效:
(let ([f (lambda x x)]) (f 1 2 3 4) )
答案是 (1 2 3 4),但是如何呢?这是我不明白的 x x 部分。 lambda 没有参数,所以主体是 x x,对吧?但我不知道在这种情况下这意味着什么,有人可以解释一下吗?谢谢。
最佳答案
事实上,您的代码中的 lambda
正在 接收参数,并且是任意数量的参数。没有参数的 lambda
的语法是不同的:
(let ([f (lambda () 1)]) (f))
=> 1
问题中的 lambda
表达式是另外一回事:
(lambda x x)
它接收可变数量的参数列表,然后返回它们。你将它命名为 f
,当它被这样调用时:
(f 1 2 3 4)
所有参数都绑定(bind)到x
,一个列表,然后返回x
的值:
'(1 2 3 4)
因此,f
只不过是一个接收多个参数的identity 函数。也许这个answer将阐明如何在 Scheme 中定义可变参数函数。为了完整起见,下面是一个 lambda
示例,它接收一个单个 参数并返回它:
(let ([f (lambda (x) x)]) (f 1))
=> 1
好了,这就是我们定义接收 0、1 或多个参数的 lambda
的方式。
关于lambda - 我不明白为什么 lambda 方案有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53676950/