我正在通过 labrepl 工作,我看到了一些遵循这种模式的代码:
;; Pattern
(apply #(apply f %&) coll)
;; Concrete example
user=> (apply #(apply + %&) [1 2 3 4])
10
这似乎等同于这种模式:
;; Pattern
(apply f coll)
;; Concrete example
user=> (apply + [1 2 3 4])
10
这些模式是否等效?如果没有,有什么区别,你什么时候用一个而不是另一个?
我从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))))
更新:我添加了每个模式的具体示例,以帮助使问题更清晰。