Macros 宏的示例代码-相同(类型)的错误
我已经阅读了来自 我不知道如何调试一些错误。 有人能描述一下什么是错的/不正确的吗Macros 宏的示例代码-相同(类型)的错误,macros,clojure,Macros,Clojure,我已经阅读了来自 我不知道如何调试一些错误。 有人能描述一下什么是错的/不正确的吗 简单版 复杂版本 它失败时也会出现同样的错误 上面的代码有什么问题? 提前感谢您的任何提示/url/notes DG您缺少一个左括号 (defmacro dbgm_v9 [x] `(let [x# ~x] (println '~x "=" x#) x#)) (defn factorial_v9 [n] (if (< n 2) n (dbgm_v9 (* n (factorial
- 简单版
- 复杂版本
DG您缺少一个左括号
(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))))))
;^ Missing (
(factorial_v9 5) ;=> 120
当
*
尝试对n
、factorial\u v9
和(dec n)
进行操作时,会导致异常。由于*
对数字进行操作,它试图将阶乘\u v9
转换为数字,但失败。缺少一个左括号
(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))))))
;^ Missing (
(factorial_v9 5) ;=> 120
当*
尝试对n
、factorial\u v9
和(dec n)
进行操作时,会导致异常。由于*
对数字进行操作,它试图将阶乘\u v9
转换为数字,但失败了
(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=>
(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))))))
;^ Missing (
(factorial_v9 5) ;=> 120
(macroexpand '(dbgm_v9 (* n factorial_v9 (dec n))))
;=>
(let* [x__31341__auto__ (* n factorial_v9 (dec n))]
(clojure.core/println (quote (* n factorial_v9 (dec n))) "=" x__31341__auto__)
x__31341__auto__)