memoize
не учитывает привязку, это можно подтвердить, посмотрев на источник, где карта в атоме определяется только аргументами.Действительно, функция с динамическим связыванием не является «прозрачной по ссылкам» (то есть ее нельзя заменить ее значением).
Есть ли что-то, что мешает вам передать *config-val*
в качестве аргумента, по крайней мере, функцииВы хотите запомнить?
user=> (source memoize)
(defn memoize
"Returns a memoized version of a referentially transparent function. The
memoized version of the function keeps a cache of the mapping from arguments
to results and, when calls with the same arguments are repeated often, has
higher performance at the expense of higher memory use."
{:added "1.0"}
[f]
(let [mem (atom {})]
(fn [& args]
(if-let [e (find @mem args)]
(val e)
(let [ret (apply f args)]
(swap! mem assoc args ret)
ret)))))