1

(list f 1 2)和有什么区别(f 1 2)吗?

如果是,那么就(f 1 2)相当于((f 1) 2)(currying)?

如果是,那么(a b)意思是“添加b到列表末尾a”?

如果是,那么append它的作用是什么?

4

3 回答 3

5

(list f 1 2) 和 (f 1 2) 之间有什么区别吗?

是:使用参数和(list f 1 2)调用函数,这将创建一个包含这些元素的列表。使用参数和调用函数,它执行任何定义的操作。listf12(f 1 2)f12f

(f 1 2) 是否等同于 ((f 1) 2) (柯里化)?

不,Lisp 中的函数不会自动柯里化。如果你调用一个函数,因为(f 1 2)它必须是一个真正的二进制函数,而不是一个柯里化函数。

(ab) 是指“将 b 添加到列表 a 的末尾”吗?

不,它的意思是“a用参数调用函数b”。

于 2013-01-31T15:59:06.253 回答
3

(list 1 2 3)是一种 Lisp 形式,它计算三个值的新列表,即12的值3

(1 2 3)是一个列表并计算错误,因为第一个元素是一个数字,而不是一个函数。作为带引号的列表,它将是元素的文字列表123

(list f 1 2)调用list评估结果的函数f1并且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' 不支持柯里化。

于 2013-01-31T16:40:42.343 回答
2

(list f 1 2)是的,和之间有明显的区别(f 1 2)
* 第一个评估为(#the value of <f># 1 2)
* 第二个评估f应用到1和的结果2

Lisp 函数不会“开箱即用”地进行柯里化,但可以定义它们来这样做。

(a b)表示将函数a应用于(的值)b

append 需要附加列表。

于 2013-01-31T15:55:32.537 回答