【发布时间】:2015-02-07 08:31:40
【问题描述】:
我正在编写一个函数,该函数基于一组声明性规则进行一组转换。这些规则是一个编译时评估的集合(没有函数调用或任何东西)。它们将包含数百个元素。
基本布局如下所示:
(defn dostuff-with-rules [stuff]
(let [rules [["foo"] ["bar"] ["baz"] ...]
transformed (reduce apply-rule stuff rules)]
(if (not= stuff transformed)
(recur transformed)
transformed))))
我担心为每个函数调用初始化大量数据会损害性能,最好将rules 移到函数范围之外。
这是否有意义,或者 Clojure 是否足够聪明,只需初始化一次规则?或者将loop 放在let 绑定中是否有意义?
编辑:如果这不是一个简单的尾递归,而是一个树遍历,每个节点都递归调用dostuff-with-rules?
【问题讨论】:
标签: performance recursion clojure tail-recursion