Мне кажется, я понимаю, что во время расширения макроса у макроса нет доступа к вещам, к которым имеет доступ функция, потому что расширение происходит до времени компиляции.
Но у меня возникают проблемы с пониманием того, каквыполнять проверки во время расширения макроса.
Например:
(defn gen-class [cl-nam]
(fn [cmd & args]
(condp = cmd
:name (name cl-nam))))
(defmacro defnclass [cl-nam]
`(def ~cl-nam (gen-class '~cl-nam)))
Я хотел бы проверить, что cl-nam не является последовательностью.Я хотел бы использовать счетчик и узнать, что его длина равна> 1.
Я понимаю, что могу заключить в кавычки println в следующем макросе, чтобы получить сообщение о времени расширения.
(defmacro defnclass_info [cl-nam]
`(do
~(println cl-nam)
(def ~cl-nam (gen-class '~cl-nam))))
Но я не уверен, как проверить, что было передано для cl-nam.
Я читаю много описаний макросов Clojure из нескольких книг, и я в замешательстве.Спасибо.