我的朋友向我展示了这一点,我很好奇为什么它会这样。我起初认为它会出现语法错误,但它并没有......这里是我的一些实验:
> (lambda lambda lambda)
#<procedure>
> ((lambda lambda lambda))
'()
> ((lambda lambda lambda) 1 2 3 4 5 6 7)
'(1 2 3 4 5 6 7)
> (lambda lambda foo)
#<procedure>
> ((lambda lambda foo))
foo: undefined;
cannot reference an identifier before its definition
> (lambda lambda 1 2 3 4 5)
#<procedure>
> ((lambda lambda 1 2 3 4 5))
5
> (lambda foo lambda)
. lambda: bad syntax in: lambda
> (lambda 1 2 3)
. lambda: bad argument sequence in: 1
> ((lambda) 1 2 3)
. lambda: bad syntax in: (lambda)
所以看来:
lambda
,lambda
可能是arg-ids?lambda
中,lambda
可以是列表构造函数吗?答案 0 :(得分:7)
哦,我明白了。 lambda
可能会被遮蔽!
> ((lambda (lambda) (+ 1 lambda)) 7)
8
此外,https://docs.racket-lang.org/guide/lambda.html给出的语法并不完全正确,因为在arg-ids
位置,标识符可能就在那里!这将使用标识符绑定参数列表:
> ((lambda foo foo) 1 2 3 4)
'(1 2 3 4)
这些解释了它!