在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