макрос clojure: невозможно разрешить символ - PullRequest
0 голосов
/ 15 апреля 2019

Clojure новичок, пробующий макросы.Я пишу следующий макрос

(defmacro f [exp]
  (let [[a op b] exp]
    (list op a b)))

(f (1 + 2))

, который работает как задумано.

Однако

Я попытался заменить возвращаемое значение с (list op a b) на '(op a b), и я * не смог разрешить символ op в этом контексте.Я подумал, что ошибка вызвана тем, что list сначала оценивает свои аргументы, поэтому я попытался с '(~op a b), но все равно получаю ту же ошибку.Что я не так понимаю?

1 Ответ

1 голос
/ 15 апреля 2019

Проблема в том, что op, a, b не могут быть оценены внутри формы в кавычках. Вам нужно использовать символ обратной галочки вместо ' (одинарная кавычка), если вы хотите использовать ~ (без кавычек) внутри макроса .

(defmacro f [exp]
  (let [[a op b] exp]
    `(~op ~a ~b)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...