Eh bien, ils sont en fait très différents. '1
est toutefois exactement le même que (quote 1)
. (car ''x)
évalue le symbole 'citation'.
1
est une S-expression, c'est la représentation d'une donnée, d'un numéro 1. Dire qu' 1
est un "numéro d'objet" ou une S-expression pour entrer dans un objet à la fois acceptable. Souvent, il est dit qu' 1
est la représentation externe pour le nombre réel de l'objet.
(quote 1)
est une autre S-expression, c'est une S-expression d'une liste dont le premier élément est le symbole 'citation' et dont le second élément est le nombre 1. C'est là que c'est déjà différent, les mots syntaxiques, contrairement aux fonctions, ne sont pas considérés comme des objets dans la langue, et ils n'évaluent pas à eux.
Toutefois, les deux sont des représentations externes des objets (données) qui évaluent le même système de référence. Le nombre dont la représentation externe est - 1
, cependant, ce ne sont certainement pas les mêmes objets, les mêmes, le code, le même système de référence géodésique le même que ce soit, ils ont juste évaluer de la même chose. Les numéros d'évaluer eux-mêmes. Dire qu'ils sont de la même est-à-dire que:
(+ 1 (* 3 3))
Et
(if "Strings are true" (* 5 (- 5 3)) "Strings are not true? This must be a bug!")
Sont "les mêmes", ils ne le sont pas, ils sont tous les deux différents programmes qui venez d'arriver à mettre fin à la même valeur, un lisp forme est aussi un programme, un formulaire est une donnée qui est aussi un programme, n'oubliez pas.
Aussi, j'ai appris un truc utile une fois que cela montre que l'auto-évaluation des données sont vraiment pas des symboles lors de la saisie:
(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
)
Auto-évaluation des données véritablement évaluer à eux-mêmes, ils ne sont pas prédéfinis par les symboles' de quelques sortes.