我在编程Clojure的书里有假咖喱。
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然而,很难理解为什么身体中需要两个部分。
在Coluredocs.org中,我认为(apply f args)是应用函数的一个示例。如何解释(apply partial partial args)
发布于 2015-12-11 19:44:56
我认为理解这一点的最简单的方法是扩大每个部分。
(partial + 2)返回一个函数(fn [& xs] (apply + 2 xs)),调用得到的函数调用带有1的+函数,并将所有后续的args传递给分部。
(apply + 2 [3 4 5])与(+ 2 3 4 5)相同
(fn [& xs] ...)说“获取一系列参数,并将它们称为xs”,这就像(fn [x1 x2 x3...] ...)
(partial partial)返回一个函数(fn [& xs] (apply partial xs)),它的行为与partial完全相同,因为它生成的函数直接调用带有所有参数的partial。
(apply partial partial args)与(partial partial arg1 arg2...)返回(fn [& xs] (apply partial arg1 arg2... xs))相同
(apply partial partial [+ 1])产生(fn [& xs] (apply partial + 1 xs))。让我们把这个结果称为g。(g 2) => (apply partial + 1 [2]) => (fn [& xs] (apply + 1 2 xs)).让我们把这个结果称为h。(h 4 5) => (apply + 1 2 [4 5]) => (+ 1 2 4 5)
但是,如果要省略其中一个部分:(apply partial [+ 1])生成(fn [& xs] (apply + 1 xs))),调用这个结果函数将不会返回函数,而是将参数之和为1的结果。
因此,在观察了这些行为之后,让我们尝试描述一下(apply partial partial args)
“创建一个函数,该函数在创建时使用提供的参数应用某些函数,在调用时应用提供的参数。”
因此,faux-curry是一个创建创建函数o_O的函数。
https://stackoverflow.com/questions/34230508
复制相似问题