在这段代码中,
(defn faux-curry [& args] (apply partial partial args))
我应该如何理解这部分:
(apply partial partial args)
在我的理解中,'partial' 接受一个函数和一些值,然后返回一个新的函数,其中一些原始函数的变量是固定的。它是否适用于第一个“部分”..第二个“部分”,它对 args 做了什么?有更好的理解方式吗?
在这段代码中,
(defn faux-curry [& args] (apply partial partial args))
我应该如何理解这部分:
(apply partial partial args)
在我的理解中,'partial' 接受一个函数和一些值,然后返回一个新的函数,其中一些原始函数的变量是固定的。它是否适用于第一个“部分”..第二个“部分”,它对 args 做了什么?有更好的理解方式吗?
使用示例参数手动评估可能会有所帮助:
(apply partial partial [+ 1 2 3]) ; 1.
; =>
(partial partial + 1 2 3) ; 2.
; =>
(fn [& args] (apply partial + 1 2 (concat [3] args))) ; 3.
我们在faux-curry
1. 的主体中替换示例参数。然后apply
在 2 中手动应用;然后在 3 中手动应用第一个partial
。(请注意,在 3. 中,实际上是编译代码[3]
中外部“rest args”的序列。)partial
需要注意的关键是它partial
是一个与任何其他函数一样的函数,因此特别是它本身可以作为第一个参数传递给partial
.