Question

Je suis en train d'apprendre LISP et traversais un exemple de code où quelque chose de similaire au code suivant est utilisé:

(liste « citation 5)

Prend la valeur « 5 dans le REPL. Je m'y attendais à évaluer à ( '5) ou (citation 5)

J'essaie ceci dans le CLISP REPL.

Toute aide serait appréciée.

Était-ce utile?

La solution

La boucle en lecture evaluate impression lit d'abord, puis evalue

«citation est lu comme « le symbole dont le nom est CITATION »

5 est lu comme "le numéro 5"

(liste « devis 5) est évaluée comme « faire une liste dont le premier élément est le symbole dont le nom est QUOTE et dont le second élément est 5 ».

Le résultat de cette évaluation peut être écrit « (citation 5) ». «5" est une autre façon de le dire, et l'imprimante dans certains (probablement plus) Lisp implentations choisiront d'imprimer le formulaire plus court au lieu de la plus longue.

Quand vous apprenez ce genre de choses en tapant au rempl vous devez vous rappeler que les deux étapes de lecture et d'évaluation sont distincts, mais que la boucle est en train de faire à la fois

Essayez

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

faire une étape à la fois, ou

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

pour vous convaincre que "(citation 5)" et «5" sont la même chose

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top