在此代码中,
(defn faux-curry [& args] (apply partial partial args))
我应该如何理解这部分:
(apply partial partial args)
在我的理解中,'partial'接受一个函数和一些值,然后返回一个函数,其中一些原始函数的变量已修复。它是否首先应用'部分'......第二个'部分',它与args做了什么?有更好的理解方法吗?
答案 0 :(得分:5)
手动评估样本参数可能会有所帮助:
(apply partial partial [+ 1 2 3]) ; 1.
; =>
(partial partial + 1 2 3) ; 2.
; =>
(fn [& args] (apply partial + 1 2 (concat [3] args))) ; 3.
我们在1 faux-curry
的正文中替换样本参数。然后在2中手工应用apply
;然后在3中手动应用第一个partial
。(注意3.在编译代码中,[3]
实际上是外部partial
的“rest args”序列。)< / p>
需要注意的关键是partial
是一个与其他函数一样的函数,因此特别是它本身可以作为partial
的第一个参数传递。