Как и Алан Томпсон, я часто использовал (def sqrt-denom (memoize (fn ...)))
, но неудобно разбивать простые defn
на def
и fn
, чтобы обернуть последние.Синтаксическое преобразование затрудняет переключение между запомненной и неметизированной версиями функции, и memoize
- это единственная функция, которая заставила меня пожелать, чтобы у Clojure было что-то вроде Python-декораторов.
Тогда, недавноЯ обнаружил, что у Clojure есть декораторы:
(defn sqrt-denom ...)
(alter-var-root #'sqrt-denom memoize)
Это очень похоже на ваш пример, но позволяет избежать путаницы двух переменных, названных одним и тем же, и в нем четко указаны намерения автора.Теперь это мой предпочтительный метод для запоминания функций.