Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Clojure中解释`(应用部分参数)`?_Clojure_Partial - Fatal编程技术网

在Clojure中解释`(应用部分参数)`?

在Clojure中解释`(应用部分参数)`?,clojure,partial,Clojure,Partial,我的书里有人造咖喱 然而,很难理解为什么身体需要两个部分 在中,我将(apply f args)作为apply函数的一个示例。如何解释(应用部分参数) 我认为理解这一点最简单的方法是展开每个部分 (部分+2)返回一个函数 (fn[&xs](应用+2xs)) 调用结果函数调用带有1的+,并将所有后续参数传递给partial (应用+2[3 4 5])与(+2 3 4 5) (fn[&xs]…)说“获取一系列参数并将它们称为xs” 这就像是(fn[x1 x2 x3…]) (部分)返回一个函数 (fn

我的书里有人造咖喱

然而,很难理解为什么身体需要两个部分


在中,我将
(apply f args)
作为apply函数的一个示例。如何解释
(应用部分参数)

我认为理解这一点最简单的方法是展开每个部分

(部分+2)
返回一个函数
(fn[&xs](应用+2xs))
调用结果函数调用带有1的
+
,并将所有后续参数传递给partial

(应用+2[3 4 5])
(+2 3 4 5)

(fn[&xs]…)
说“获取一系列参数并将它们称为xs” 这就像是
(fn[x1 x2 x3…])

(部分)
返回一个函数
(fn[&xs](应用部分xs))
它的行为与
partial
完全相同,因为它生成的函数仅使用所有参数直接调用
partial

(应用部分参数)
(部分arg1 arg2…
返回
(fn[&xs](应用部分arg1 arg2…xs))

(应用部分[+1])
生成
(fn[&xs](应用部分+1xs))
。 让我们把这个结果称为
g
(g2)
=>
(应用部分+1[2])
=>
(fn[&xs](应用+1+2 xs))
。我们将此结果称为
h
<代码>(H45)=>
(应用+12[45])
=>
(+1245)

但如果你要省略其中一个部分:
(应用部分[+1])
生成
(fn[&xs](应用+1xs))
调用此结果函数不会返回函数,而是返回参数与1求和的结果

在观察到这些行为之后,让我们尝试描述
(应用部分参数)

创建一个函数,该函数创建一个函数,该函数在创建时使用提供的参数应用某个函数,在调用时使用提供的参数应用某个函数


因此,
faux curry
是一个创建函数的函数,该函数创建了一个函数o_o

算了,幸运的是,定义中只有两个
partial
s!等效的定义是
(def faux curry(部分))
user=> (defn faux-curry [& args] (apply partial partial args))
#'user/faux-curry
user=> (def add-3 ((faux-curry +) 3))
#'user/add-3
user=> (add-3 10)
13