(list f 1 2)
和有什么区别(f 1 2)
吗?
如果是,那么就(f 1 2)
相当于((f 1) 2)
(currying)?
如果是,那么(a b)
意思是“添加b
到列表末尾a
”?
如果是,那么append
它的作用是什么?
(list f 1 2) 和 (f 1 2) 之间有什么区别吗?
是:使用参数和(list f 1 2)
调用函数,这将创建一个包含这些元素的列表。使用参数和调用函数,它执行任何定义的操作。list
f
1
2
(f 1 2)
f
1
2
f
(f 1 2) 是否等同于 ((f 1) 2) (柯里化)?
不,Lisp 中的函数不会自动柯里化。如果你调用一个函数,因为(f 1 2)
它必须是一个真正的二进制函数,而不是一个柯里化函数。
(ab) 是指“将 b 添加到列表 a 的末尾”吗?
不,它的意思是“a
用参数调用函数b
”。
(list 1 2 3)
是一种 Lisp 形式,它计算三个值的新列表,即1
和2
的值3
。
(1 2 3)
是一个列表并计算错误,因为第一个元素是一个数字,而不是一个函数。作为带引号的列表,它将是元素的文字列表1
,2
和3
。
(list f 1 2)
调用list
评估结果的函数f
,1
并且2
. f
是一个变量,评估取其值。1
并且2
是对自己进行评估的数字。它返回三个元素的新列表。
(f 1 2)
f
在评估1
和的值上调用函数2
,它们正在评估自己。
((f 1) 2)
在 Lisp 中无效。一些 Lisp 方言,如 Scheme,允许这样做。在 Lisp 中,函数形式的第一个元素必须是函数名(或者在 Common Lisp 中是 lambda 形式)。
(a b)
a
表示根据评估的值调用函数b
,评估为变量的值b
。
append
用于附加列表。
也不,'Lisp' 不支持柯里化。
(list f 1 2)
是的,和之间有明显的区别(f 1 2)
:
* 第一个评估为(#the value of <f># 1 2)
。
* 第二个评估f
应用到1
和的结果2
。
Lisp 函数不会“开箱即用”地进行柯里化,但可以定义它们来这样做。
(a b)
表示将函数a
应用于(的值)b
。
append
需要附加列表。