方案中lambda表达式的解释

时间:2013-05-15 00:24:04

标签: lisp scheme

我想知道是否有人能解释这个lambda表达式以及如何导出输出。我把它放入口译员并得到((2) 2)。我只是不确定为什么它会给我而不只是(2 2)

 ((lambda x (cons x x)) 2)

4 个答案:

答案 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周围的括号。)