如果Clojure是lisp-1并且我有一个函数m,那么怎么可能还有一个var m引用函数m的memoized版本?
(defn m .....)
(def m (memoize m))
这是来自Halloway的PragPub Clojure一书。我无法理解这里发生了什么,因为函数和变量在Clojure中与lisp-1共享相同的命名空间。
答案 0 :(得分:4)
在Joy of Clojure
的p72上:
Lisp-1对函数和值使用相同的名称解析 绑定...因为使用相同的名称解析方案 功能和他们的论点,真的有可能出现阴影 与其他本地人或Vars的现有功能。
因此可以使用阴影(或重新绑定)变量,就像在代码中一样:
(defn m ...)
(def m (memoize m))
(memoize m)
返回memoized版本的函数,此函数重新绑定(覆盖)到m
。就是这样。