Lisp scheme中lambda表达式的解释

Lisp scheme中lambda表达式的解释,lisp,scheme,Lisp,Scheme,我想知道是否有人可以解释这个lambda表达式以及输出是如何派生的。我把它放进解释器,得到((2)2)。我只是不知道为什么它会给我这个,而不仅仅是(2) 表达式(lambda x(cons x))生成一个函数;函数将所有参数放入一个列表x;函数返回(cons x x) 您的表达式使用参数2调用上述函数。函数中的x是(2)(所有参数的列表)。函数(cons'(2)'(2))返回((2)2)表达式(lambda x(cons x))生成一个函数;函数将所有参数放入一个列表x;函数返回(cons x

我想知道是否有人可以解释这个lambda表达式以及输出是如何派生的。我把它放进解释器,得到
((2)2)
。我只是不知道为什么它会给我这个,而不仅仅是
(2)

表达式
(lambda x(cons x))
生成一个函数;函数将所有参数放入一个列表
x
;函数返回
(cons x x)

您的表达式使用参数
2
调用上述函数。函数中的
x
(2)
(所有参数的列表)。函数
(cons'(2)'(2))
返回
((2)2)
表达式
(lambda x(cons x))
生成一个函数;函数将所有参数放入一个列表
x
;函数返回
(cons x x)

您的表达式使用参数
2
调用上述函数。函数中的
x
(2)
(所有参数的列表)。函数
(cons'(2)'(2))
返回
((2)2)

不一样

(list x x)
因为它产生点对,例如
(cons2)
返回
(2.2)

但当虚线对的右边是一个列表时,整个事情就是一个列表
(lambda x expr)
接受任意数量的参数,将它们放入列表
x
,这里就是
(2)
。点对
((2)。(2))
按照Lisp约定打印为
((2)2)

不一样

(list x x)
因为它产生点对,例如
(cons2)
返回
(2.2)


但当虚线对的右边是一个列表时,整个事情就是一个列表
(lambda x expr)
接受任意数量的参数,将它们放入列表
x
,这里就是
(2)
。点对
((2)。(2))
按照Lisp约定打印为
((2)2)

是的,您已经脱离了方案的深层次

您已经删除了允许您编写接受零个或多个参数的函数的符号。(任何数字都可以)

如果只需要一个参数,则需要将x括在一组括号中

你想用

(列表x)

(cons x(cons x’())


作为函数体,正确格式的列表将在尾部有一个空列表。

是的,您已经脱离了方案的深层次

您已经对允许您编写一个接受零个或多个参数的函数的表示法进行了删节

如果只需要一个参数,则需要将x括在一组括号中

你想用

(列表x)

(cons x(cons x’())


作为函数体,作为一个格式正确的列表,尾部将有一个空列表。

您可能想写:

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

(注意
x
)周围的括号。

您可能想写:

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

(注意
x
周围的括号).

这是一个总是返回
6
的函数。请显示一些周围的代码。我的指定,将错误的行附加到剪贴板,更新了行这是一个总是返回
6
的函数。请显示一些周围的代码。我的指定,将错误的行附加到剪贴板,更新了行为什么有(2)另一个是2?因为
(cons thing'(2))
产生
(thing 2)
。本质上
cons
是用来扩展列表的。对不起,我还是不太明白发生了什么。这里()是一个解释
cons
的参考资料。尝试…
(2)
是一个元素的列表;
cons
扩展了列表。因此
(cons thing'(2))
生成了一个新的
(thing 2)
)列表。在你的例子中,
thing
(2)
。好了,现在发生的事情开始变得更有意义了,谢谢!!为什么有(2)另一个是2?因为
(cons thing'(2))
产生
(thing 2)
。本质上
cons
是用来扩展列表的。对不起,我还是不太明白发生了什么。这里()是一个解释
cons
的参考资料。尝试…
(2)
是一个元素列表;
cons
扩展列表。因此
(cons thing'(2))
生成一个新的
(thing 2)
列表。在您的情况下,
thing
(2)
,所以新列表是
((2)2)
。好了,现在发生的事情开始变得更有意义了,谢谢!!
((lambda (x) (cons x x)) 2)