我想知道是否有人能解释这个lambda表达式以及如何导出输出。我把它放入口译员并得到((2) 2)
。我只是不确定为什么它会给我而不只是(2 2)
。
((lambda x (cons x x)) 2)
答案 0 :(得分:5)
表达式(lambda x (cons x x))
产生一个函数;该函数将所有参数放入列表x
;该函数返回(cons x x)
。
您的表达式使用2
参数调用上述函数。在函数x
中是(2)
(所有参数的列表)。函数(cons '(2) '(2))
返回((2) 2)
答案 1 :(得分:1)
(cons x x)
与
不同(list x x)
因为它产生点对,例如(cons 2 2)
会返回(2 . 2)
。
但是当虚线对的右侧是一个列表时,整个事情就是一个列表。 (lambda x expr)
接受任意数量的参数,将它们放在列表 x
中,这样(2)
就可以了。根据Lisp约定,点对((2) . (2))
打印为((2) 2)
。
答案 2 :(得分:0)
是的,你已经失去了计划的深层次。
你已经完成了一个符号,它允许你编写一个接受零个或多个参数的函数。 (真的是任何数字)
(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括在一组括号中。
你想用
(list x x)
或
(cons x(cons x'(())
作为函数体,正确形成的列表在尾部位置将有一个空列表。
答案 3 :(得分:0)
你可能想写:
((lambda (x) (cons x x)) 2)
(请注意x
周围的括号。)