我想知道是否有人可以解释这个 lambda 表达式以及如何导出输出。我把它放到解释器中并得到((2) 2)
. 我只是不确定为什么它给了我那个而不是(2 2)
.
((lambda x (cons x x)) 2)
该表达式(lambda x (cons x x))
产生一个函数;该函数将所有参数放入列表中x
;函数返回(cons x x)
。
您的表达式使用参数调用上述函数2
。在函数x
中是(2)
(所有参数的列表)。函数(cons '(2) '(2))
返回((2) 2)
(cons x x)
不一样
(list x x)
因为它产生点对,例如(cons 2 2)
返回(2 . 2)
。
但是当点对的右边是一个列表时,整个东西就是一个列表。(lambda x expr)
接受任意数量的参数,将它们放在一个list 中 x
,所以就在(2)
这里。虚线对按照 Lisp 约定((2) . (2))
打印。((2) 2)
是的,你已经脱离了计划的深处。
您遇到了允许您编写一个接受零个或多个参数的函数的表示法。(真的是任何数字)
(define add-nums
(lambda x
(if (null? x)
0
(+ (car x) (apply add-nums (cdr x))))))
(add-nums 1 87 203 87 2 4 5)
;Value: 389
如果您只需要一个参数,则需要将 x 括在一组括号中。
你想用
(清单 xx)
或者
(缺点 x (缺点 x '())
作为函数体,作为一个格式正确的列表,在尾部位置会有一个空列表。
你可能想写:
((lambda (x) (cons x x)) 2)
(注意 周围的括号x
)。