我試圖在Clojure中創建一個函數(let ...)函數的本體函數。我嘗試了以下,但(定義...)在全局名稱空間中定義的東西。現在如何對let body本地創建遞歸函數
(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)
我如何,其名稱空間是本地令身體能功能遞歸調用自己?
'(= exp 0)'=>'(zero?exp)'; '(> exp 0)'=>'(pos?exp)'; '(< exp 0)' =>'(neg?exp)' – 2010-11-10 00:38:21