Запятая не внутри кавычки - PullRequest
1 голос
/ 05 апреля 2020

Я следил http://www.gigamonkeys.com/book/. В главе http://www.gigamonkeys.com/book/practical-building-a-unit-test-framework.html есть макрос под названием check, который имеет следующее определение.

(defmacro check (form)
  `(report-result ,form ',form))

Насколько я понимаю, макрос I, хотя приведенный выше код эквивалентен следующему коду

(defmacro check (form)
  `(report-result ,form form))

Но бросает Comma not inside a backquote..

1 Ответ

5 голосов
/ 05 апреля 2020

Если вы представляете, что form оценивается как символ test, тогда это верно:

`(report-result ,form ',form))
==> (report-result test 'test)

Таким образом, ' остается в расширении, так что в оценке заменяется Форма цитируется. Однако ваш «эквивалент» делает это:

`(report-result ,form form)
==> (report-result test form)

Здесь вы видите, что form никогда не заменяется, поэтому теперь вам нужно иметь переменную с именем form, иначе вы получите ошибку.

...