【发布时间】:2016-03-08 22:52:56
【问题描述】:
我想使用 defmacro 来计算数字列表的平均值。它应该像这样运行:
user=> (avg 1 2 3 4 5 6)
3.5
我的代码是:
(defmacro ave [& number]
`(float `(/ `(reduce + ~number) `(count ~number))))
但我得到了一个错误:
**ClassCastException clojure.lang.Cons cannot be cast to java.lang.Number clojure.lang.RT.floatCast (RT.java:1262)**
我该如何解决?谢谢
【问题讨论】:
-
请注意,这不是使用宏的真实案例,这是一个关于如何编写宏的好问题。如果您以后遇到此答案,请不要编写宏,除非必须这样做。