在 Clojure 中解释“(apply partial partial args)”?
Interpreting `(apply partial partial args)` in Clojure?
我在 Programming 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)
?
我认为理解这一点的最简单方法是展开每个部分。
(partial + 2)
return是一个函数
(fn [& xs] (apply + 2 xs))
使用 1 调用生成的函数调用 +
并将所有后续参数传递给 partial.
(apply + 2 [3 4 5])
等同于 (+ 2 3 4 5)
(fn [& xs] ...)
说 "take a sequence of arguments and call them xs"
这就像 (fn [x1 x2 x3...] ...)
(partial partial)
return是一个函数
(fn [& xs] (apply partial xs))
它与 partial
具有完全相同的行为,因为它生成的函数直接使用所有参数调用 partial
。
(apply partial partial args)
是相同的
(partial partial arg1 arg2...)
return秒
(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)))
调用此结果函数将不会 return 一个函数,而是将参数与 1 相加的结果。
观察到这些行为后,让我们尝试描述一下
(apply partial partial args)
:
"Create a function that creates a function that applies some function with the supplied arguments at creation time, and the supplied arguments at call time."
因此faux-curry
是创建函数的函数,创建函数的函数o_O
我在 Programming 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)
?
我认为理解这一点的最简单方法是展开每个部分。
(partial + 2)
return是一个函数
(fn [& xs] (apply + 2 xs))
使用 1 调用生成的函数调用 +
并将所有后续参数传递给 partial.
(apply + 2 [3 4 5])
等同于 (+ 2 3 4 5)
(fn [& xs] ...)
说 "take a sequence of arguments and call them xs"
这就像 (fn [x1 x2 x3...] ...)
(partial partial)
return是一个函数
(fn [& xs] (apply partial xs))
它与 partial
具有完全相同的行为,因为它生成的函数直接使用所有参数调用 partial
。
(apply partial partial args)
是相同的
(partial partial arg1 arg2...)
return秒
(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)))
调用此结果函数将不会 return 一个函数,而是将参数与 1 相加的结果。
观察到这些行为后,让我们尝试描述一下
(apply partial partial args)
:
"Create a function that creates a function that applies some function with the supplied arguments at creation time, and the supplied arguments at call time."
因此faux-curry
是创建函数的函数,创建函数的函数o_O