Я думаю, вы просите что-то вроде этого:
(defmacro and-zero
([] true)
([x] (zero? x))
([x & next]
`(let [and# (zero? ~x)]
(if and#
(and-not-zero ~@next)
and#))))
user=> (and-zero 0 0 0)
true
user=> (and-zero 0 1 0)
false
Макрос предполагает, что каждое выражение оценивается как число.Он выдаст исключение, если, например, выражение оценивается как nil
.
. Тогда вы можете написать yout defn-my
, например:
(defmacro defn-my [ & body ] `(and-zero ~@body))