Ваш код работает для меня.
user> (defmacro macro-hello [] `"hello")
#'user/macro-hello
user> (eval '(macro-hello))
"hello"
Это через ультрасовременный Clojure. «Невозможно разрешить символ» означает, что он не может найти макрос с именем macro-hello
в текущем пространстве имен. Вы запускаете это из REPL или из исходного файла? Я напечатал ваши заявления в REPL буквально.
Не уверен, что это является причиной проблем для вас, но, пожалуйста, обратите внимание на разницу между `
и 'в Clojure. `
разрешает пространство имен, а '
- нет.
user> `macro-hello
user/macro-hello
user> 'macro-hello
macro-hello
Это отличается от поведения Common Lisp. Заключение в кавычки строки типа `"hello"
не имеет особого смысла, поскольку строки не принадлежат пространствам имен, но также ничего не мешают.
(Я предполагаю, что вы сделали опечатку в своем коде Clojure с отсутствующей двойной кавычкой.)