skr*_*rat 2 macros functional-programming clojure clojurescript
这应该类似memoize
,但非常不同.虽然memoize应该与纯函数一起使用,但加速IO相关函数通常很有用.
我正在寻找的函数/宏应该表现得像高阶函数.它产生的功能应该:
修改memoize
执行此操作的源代码很容易.
(defn memo-one [f]
(let [mem (atom {})]
(fn [& args]
(if-let [e (find @mem args)]
(val e)
(let [ret (apply f args)]
(reset! mem {args ret})
ret)))))
(defn foo [x] (println "called foo") x)
(def memo-foo (memo-one foo))
Run Code Online (Sandbox Code Playgroud)
但是,已经有一个灵活的memoization库可以做到这一点.
(require '[clojure.core.memoize :as memo])
(defn foo [x] (println "called foo") x)
(def memo-foo (memo/lru foo :lru/threshold 1))
Run Code Online (Sandbox Code Playgroud)
(memo-foo 1)
; called foo
; 1
(memo-foo 1)
; 1
(memo-foo 2)
; called foo
; 2
(memo-foo 1)
; called foo
; 1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
139 次 |
最近记录: |