http://www.learningclojure.com/2010/09/clojure-macro-tutorial-part-i-getting.htmlサイトからマクロのチュートリアルを読みましたが、 いくつかのエラーをデバッグする方法がわかりません。誰かが間違っている/正しくないことを説明できますか?
- シンプルなバージョン
(defmacro dbgm_v1 [s] (list 'let ['a s] (list 'println (list 'quote s) "=" 'a) 'a) )
;;;;
(defn factorial_v1 [n] (if (< n 2) n (dbgm_v1 (* n factorial_v1(dec n)) ) ) )
;;
; let's test it
(factorial_v1 5) ClassCastException clojure.dg.alfa01$factorial_v1 cannot be cast to java.lang.Number clojure.lang.Numbers.multiply (Numbers.java:146)
- 複雑なバージョン
(defmacro dbgm_v9 [x] `(let [x# ~x] (println '~x "=" x#) x#) )
;
(defn factorial_v9 [n] (if (< n 2) n (dbgm_v9 (* n factorial_v9 (dec n))) ))
;
user=> (factorial_v9 5) ClassCastException clojure.dg.alfa01$factorial_v9 cannot be cast to java.lang.Nu mber clojure.lang.Numbers.multiply (Numbers.java:146) user=>
同じエラーで失敗します。
上記のコードの何が問題になっていますか? ヒント/URL/メモをよろしくお願いします!
DG