在lisp-1中具有相同名称的函数和var?

时间:2014-01-21 06:49:47

标签: clojure memoization

如果Clojure是lisp-1并且我有一个函数m,那么怎么可能还有一个var m引用函数m的memoized版本?

(defn m .....)

(def m (memoize m))

这是来自Halloway的PragPub Clojure一书。我无法理解这里发生了什么,因为函数和变量在Clojure中与lisp-1共享相同的命名空间。

1 个答案:

答案 0 :(得分:4)

Joy of Clojure的p72上:

  

Lisp-1对函数和值使用相同的名称解析   绑定...因为使用相同的名称解析方案   功能和他们的论点,真的有可能出现阴影   与其他本地人或Vars的现有功能。

因此可以使用阴影(或重新绑定)变量,就像在代码中一样:

(defn m ...)

(def m (memoize m))

(memoize m)返回memoized版本的函数,此函数重新绑定(覆盖)到m。就是这样。