“Programming Clojure”一书中“几乎是咖喱”实现的一个例子

时间:2013-06-04 21:54:25

标签: clojure

在此代码中,

(defn faux-curry [& args] (apply partial partial args))

我应该如何理解这部分

(apply partial partial args)

在我的理解中,'partial'接受一个函数和一些值,然后返回一个函数,其中一些原始函数的变量已修复。它是否首先应用'部分'......第二个'部分',它与args做了什么?有更好的理解方法吗?

1 个答案:

答案 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的第一个参数传递。