clojure :(应用fn coll)vs(应用#(应用fn%&)coll)

rig*_*ern 6 clojure

我正在通过labrepl工作,我看到了一些遵循这种模式的代码:

;; Pattern
(apply #(apply f %&) coll)

;; Concrete example
user=> (apply #(apply + %&) [1 2 3 4])
10
Run Code Online (Sandbox Code Playgroud)

这似乎等同于这种模式:

;; Pattern
(apply f coll)

;; Concrete example
user=> (apply + [1 2 3 4]) 
10
Run Code Online (Sandbox Code Playgroud)

这些模式是否相同?如果没有,有什么区别,你何时会使用另一个?

我从labrepl的细胞自动机实验室的step函数中采用了前一种模式:

(defn step
  "Advance the automation by one step, updating all cells."
  [board]
  (doall
   (map (fn [window]
          (apply #(apply map brians-brain-rules %&)
                 (doall (map torus-window window))))
        (torus-window board))))
Run Code Online (Sandbox Code Playgroud)

更新:我添加了每个模式的具体示例,以帮助使问题更清晰.

ama*_*loy 4

不,没有区别。没有理由写更长的形式;我只能假设它是通过对一度有意义的代码进行逐步更改而实现的。