在这段代码中,
(defn faux-curry [& args] (apply partial partial args))
Run Code Online (Sandbox Code Playgroud)
我应该如何理解这一部分:
(apply partial partial args)
Run Code Online (Sandbox Code Playgroud)
在我的理解中,'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.
Run Code Online (Sandbox Code Playgroud)
我们将1中的样本参数替换为faux-curry
1.然后apply
手工应用2.然后partial
在3中手动应用第一个.(注意,在编译代码中,[3]
in 3.实际上是"rest args"的seq partial
.)
需要注意的关键是它partial
是一个像任何其他函数一样的函数,所以特别是它本身可以作为第一个参数传递给partial
.