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

我已经阅读了来自 我不知道如何调试一些错误。 有人能描述一下什么是错的/不正确的吗

  • 简单版
  • 复杂版本
它失败时也会出现同样的错误

上面的代码有什么问题? 提前感谢您的任何提示/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_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__)