使用memoize的推荐方法是什么?

nak*_*iya 0 clojure

我偶尔会使用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)

我假设在记忆时重用函数名是"合适的".这是一个好习惯吗?或者我应该为非记忆和记忆功能使用不同的名称?

Ala*_*son 5

我永远不会重复使用顶级名称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)