У меня возникла странная проблема, связанная с defmacro в Clojure, у меня есть код вроде
(defmacro ttt
([] (ttt 1))
([a] (ttt a 2))
([a b] (ttt a b 3))
([a b c] `(println ~a ~b ~c)))
и я запускаю с (ttt)
, он должен стать (println 1 2 3)
и напечатать "1 2 3", но я получил
ArityException Wrong number of args (-1) passed to: t1$ttt clojure.lang.Compiler.macroexpand1 (Compiler.java:6473)
после некоторого расследования, я понимаю, что я должен написать
(defmacro ttt
([] `(ttt 1))
([a] `(ttt ~a 2))
([a b] `(ttt ~a ~b 3))
([a b c] `(println ~a ~b ~c)))
но почему первая версия не удалась? и args
слишком странно понимать, откуда -1
происходит?