Что означает обратный удар в LISP?

У меня есть этот макрос, который переписывает определение. Если я уберу знак " ` ", он не будет работать. Какое объяснение?

(defmacro define ((name &rest r) body) 
  `(defun ,name ,r ,body))

2 ответа

Решение

Одиночная кавычка, за которой следует письменное представление значения, создаст это значение:

Пример: '(1 x "foo") выдаст значение, которое печатается как (1 x "foo"),

Предположим теперь, что я не хочу буквальный символ x в списке. У меня есть переменная x в моей программе, и я хочу вставить значение, к которому x,

Чтобы отметить, что я хочу значение x а не символ xЯ вставляю запятую перед x:

'(1 ,x "foo")

Это не будет работать как есть - теперь я получаю значение, которое имеет буквальную запятую, а также символ x, Проблема в том, что quote не знает о соглашении запятых.

Backtick или backquote знает о соглашении с запятыми, что даст правильный результат:

> `(1 ,x "foo")
(1 3 "foo")          ; if the value of x is 3

Подробнее читайте здесь: http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm

Обратный кавычк / обратная кавычка отключает оценку для каждого подвыражения, которому не предшествует запятая для списка, следующего за оператором.

Из общей кулинарной книги, пояснения и несколько примеров.

Другие вопросы по тегам