Это не мой «рабочий код», а упрощение проблемы в целях иллюстрации. Кроме того, название этого вопроса вводит в заблуждение, поскольку оно напоминает расширение ~ @, которое, как я понимаю, не всегда является проблемой. Пожалуйста, предложите лучшее название вопроса, если можете.
Дан макрос со следующей формой:
(defmacro my-add [x & ys] `(+ ~x ~@ys))
Теперь допустим, у нас есть список:
(def my-lst '(2 3))
Теперь я хочу функцию, использующую my-add, в которую я могу передать my-lst в виде аргумента, т. Е.
(call-my-add 1 my-lst)
Я определяю функцию, как кажется, очевидным образом:
(defn call-my-add [x ys]
(apply my-add (cons x ys)))
Но:
java.lang.Exception: Can't take value of a macro: #'user/call-my-add (repl-1:60)
Я пробовал всевозможные дикие уловки, чтобы заставить функцию call-my-add работать с использованием evals, применений и даже определения call-my-add в качестве макроса, но все они дают похожие ClassCastExceptions.
Есть ли выход из этого?