我偶尔会使用memoize功能.通常采用以下形式:
(defn- sqrt-denom [iterations]
(/ 1 (if (= iterations 0)
2
(+ 2 (sqrt-denom (dec iterations))))))
(def sqrt-denom (memoize sqrt-denom))
Run Code Online (Sandbox Code Playgroud)
我假设在记忆时重用函数名是"合适的".这是一个好习惯吗?或者我应该为非记忆和记忆功能使用不同的名称?
我永远不会重复使用顶级名称def,尤其是在自引用时.两种选择:
(defn ^:no-doc sqrt-denom-impl [iterations]
(/ 1 (if (= iterations 0)
2
(+ 2 (sqrt-denom (dec iterations))))))
(def sqrt-denom (memoize sqrt-denom-impl))
Run Code Online (Sandbox Code Playgroud)
甚至更简单:
(def sqrt-denom
(memoize (fn [iterations]
(/ 1 (if (= iterations 0)
2
(+ 2 (sqrt-denom (dec iterations))))))
Run Code Online (Sandbox Code Playgroud)