Поведение вложенных цитат в схеме и ракетке - PullRequest
6 голосов
/ 02 ноября 2011

При написании функции в Racket я случайно поместил две одинарные кавычки перед символом вместо одного. то есть я случайно написал '' a и обнаружил некоторое поведение вложенных цитат, которое кажется странным. Я использую DrRacket и проверил это как на Racket lang, так и на R5RS.

(write (pair? (quote (quote a))))

отпечатков: # т.

(write (car (quote (quote a))))

отпечатков: цитата

Но

(write (quote (quote a)))

и

(write '(quote a)))

Обе печати: 'a

Может кто-нибудь сказать мне, почему в Scheme (и Racket) пара функций? интерпретирует (quote (quote a))) как пару из двух элементов quote и a, но функция write выводит 'a вместо (quote a).

1 Ответ

8 голосов
/ 02 ноября 2011

Помещение кавычки (') вокруг термина и наложение формы quote вокруг него идентичны.Таким образом, они read относятся к одному и тому же термину.

Таким образом, все следующие выражения идентичны на схеме:

''a
'(quote a)
(quote 'a)
(quote (quote a))

Форма quote означает "интерпретировать то, что следует далее, какэлемент данных --- даже если он содержит другой quote ".Этот термин заключен в скобки, поэтому это список;внутренний quote является просто символом.

В некоторых случаях принтер использует сокращения вывода, такие как знак кавычки ('), в своем выводе.Я немного удивлен, что у вас есть write, чтобы сделать это, хотя;для меня это всегда пишет как (quote a).

...