Я пытаюсь создать функцию в Clojure, которая является локальной для тела функции (let ...). Я попробовал следующее, но (defn ...) определяет вещи в глобальном пространстве имен.
(let [] (defn power [base exp]
(if (= exp 0)
1
(if (> exp 0)
; Exponent greater than 0
(* base (power base (- exp 1)))
; Exponent less than 0
(/ (power base (+ exp 1)) base))))
(println (power -2 3)))
; Function call outside of let body
(println (power -2 3))
Теперь я тоже попробовал:
(let [power (fn [base exp]
(if (= exp 0)
1
(if (> exp 0)
; Exponent greater than 0
(* base (power base (- exp 1)))
; Exponent less than 0
(/ (power base (+ exp 1)) base))))]
(println (power -2 3)))
; Function call outside of let body
(println (power -2 3))
Но тогда я получаю ошибку:
Exception in thread "main" java.lang.Exception: Unable to resolve symbol: power in this context (math.clj:6)
Как создать функцию, пространство имен которой является локальным для тела let и может рекурсивно вызывать себя?