Ну, на самом деле они очень разные.'1
, однако, точно такой же, как (quote 1)
.(car ''x)
оценивается как символ «кавычка».
1
- это S-выражение, это внешнее представление элемента данных, числа 1. Сказать, что 1
- это «числовой объект».'или S-выражение для ввода этого объекта было бы приемлемым.Часто говорят, что 1
является внешним представлением для объекта фактического числа.
(quote 1)
- это еще одно S-выражение, это S-выражение для списка , чей первый элементявляется символом «кавычка», а вторым элементом является число 1. Здесь это уже отличается, синтаксические ключевые слова, в отличие от функций, не считаются объектами в языке, и они не оценивают их.
Однакооба являются внешними представлениями объектов (данных), которые оценивают для одного и того же элемента данных.Число, внешнее представление которого равно 1
, однако, это, безусловно, не одни и те же объекты, один и тот же код, одни и те же данные, что бы они ни были, они просто оценивают одно и то же.Числа оценивают сами.Сказать, что они одинаковы, значит сказать, что:
(+ 1 (* 3 3))
и
(if "Strings are true" (* 5 (- 5 3)) "Strings are not true? This must be a bug!")
«одинаковы», они не являются, они обе разные программы, которые просто случаются прекратить до того же значения, форма lisp - это тоже программа, форма - это датум, который также является программой, запомните.
Кроме того, меня научили удобному трюку, как толькопоказывает, что самооценочные данные на самом деле не являются символами при вводе:
(let ((num 4))
(symbol? num) ; ====> evaluates to #f
(symbol? 'num) ; ====> evaluates to #t
(symbol? '4) ; ====> evaluates to #f
(symbol? '#\c) ; #f again, et cetera
(symbol? (car ''x)) ; #t
(symbol? quote) ; error, in most implementations
)
Самооценочные данные действительно оценивают сами себя, они не являются «предопределенными символами» некоторых видов.