Почему (список 'quote' x) оценивает 'x, а не (' x) или (quote 'x)?
-
26-09-2019 - |
Вопрос
Я пытаюсь изучить 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» - это то же самое