我将我的宏传递给地图操作(也是一个宏)。我在搞定价值方面遇到了一些麻烦。这是一个例子:
(def num-vec [1 2 3 4 5])
(defmacro describe-args [first-arg & remaining-args]
`(println '~first-arg '~remaining-args))
(doall (map #(describe-args "my args " %) num-vec))
返回:
my args (p1__432#)
my args (p1__432#)
my args (p1__432#)
my args (p1__432#)
my args (p1__432#)
我的问题是:如何从Clojure中的地图宏中获取宏中的参数?
(我认为这是与已经提出的其他地图/宏问题不同的问题,因为这是关于参数检索)。
答案 0 :(得分:2)
您可以将宏describe-args
更改为:
(defmacro describe-args [desc & args]
`(println ~desc ~@args))
现在
(doall (map #(describe-args "my args " %) num-vec))
打印
my args 1
my args 2
my args 3
my args 4
my args 5
此answer中描述了更常用的调试宏。
答案 1 :(得分:0)
不确定这是否是你想要的
(defmacro print-second [form]
(if (list? form)
`(do (println '~(second form) " = " ~(second form)) ~form)
form))
(def num-vec [1 2 3 4 5])
(doall (map #(print-second (+ (* 3 42) %)) num-vec))
=>
;(* 3 42) = 126
;(* 3 42) = 126
;(* 3 42) = 126
;(* 3 42) = 126
;(* 3 42) = 126
(127 128 129 130 131)
(print-second (+ 99 7))
=>
;99 = 99
106
(print-second 3)
=>
3