как квазицитаты представлены в синтаксическом дереве (CL) - PullRequest
1 голос
/ 13 марта 2020

Я понимаю, как кавычки представлены на языке:

(equal ''(1 2) (list 'quote (list 1 2))) ;; => T

а как насчет квази-кавычек? это что-то вроде:

(equal ``(1 2) (list '<???> (list 1 2)))

Оба quasiquote и backquote вместо <???> не работают.

Ответы [ 2 ]

3 голосов
/ 13 марта 2020

В Common Lisp нет стандартного представления. Что задано в кавычках do , но нет эквивалента quote. В частности, выражение c говорит в 2.4.6 , после указания спецификации поведения обратной цитаты:

Реализация может свободно интерпретировать форму F1 в кавычках как любую форма F2, которая при оценке будет давать результат, который не совпадает с результатом, подразумеваемым вышеприведенным определением, при условии, что побочное действие замещающей формы F2 также соответствует описанию, приведенному выше.

Обратите внимание, что на самом деле это не проблема, поскольку обратная кавычка - это то, что вы можете реализовать самостоятельно, в то время как quote должно быть в духе языка.

2 голосов
/ 13 марта 2020

Как правило, представление не требуется:

 '`(1 2) -> '(1 2)

 '`(,1 2) -> '(1 2)

 '`(,a 2) -> (list* a '(2))

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

...