Почему (список 'quote' x) оценивает 'x, а не (' x) или (quote 'x)?

StackOverflow https://stackoverflow.com/questions/4226948

Вопрос

Я пытаюсь изучить Lisp и проходил через пример кода, где используется что-то похожее на следующий код:

(список 'quote 5)

Это оценивает 5 5 в REPL. Я ожидал, что он оценивает ('5) или (цитата 5)

Я пробую это в залипском репре.

Любая помощь будет оценена.

Это было полезно?

Решение

Спектакль печати по оценке чтения первым читает, затем оценивает

«Цитата читается как« Символ, имя которого цитата »

5 читается как «номер 5»

Итак (список «цитата 5) оценивается как« Сделать список, первый элемент которого является символом, имя которого является цитатой, а второй элемент которого составляет 5 ».

Результатом этой оценки можно записать как «(цитата 5)». «5» - это еще один способ сказать это, и принтер в некоторых (вероятностей большинства) Impreentations Lisp решит распечатать более короткую форму вместо более длительного.

Когда вы изучаете этот материал, набрав на ref, вам нужно помнить, что два этапа чтения и оценки отличаются, но что цикл делает оба

Пытаться

* (read-from-string "(list 'quote 5)")
(LIST 'QUOTE 5)

сделать один шаг за раз или

* (first (read-from-string "(quote 5)"))
QUOTE
* (second (read-from-string "(quote 5)"))
5
* (read-from-string "(quote 5)")
'5

чтобы убедить себя, что «(цитата 5)» и «5» - это то же самое

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top