Frage

Ich versuche LISP zu lernen und wurde ein Codebeispiel durchlaufen, wo etwas ähnlich den folgenden Code verwendet wird:

(list ‚Zitat 5)

Diese auswertet zu ‚5 in der REPL. Ich erwartete sie ( '5) oder (Zitat 5)

bewerten

Ich versuche, diese aus der CLISP REPL.

Jede mögliche Hilfe würde geschätzt.

War es hilfreich?

Lösung

Die Lese-evaluate-Druckschleife liest zuerst, dann auswertet

"Zitat gelesen, als "das Symbol, dessen Name QUOTE"

5 wird als "die Nummer 5"

lesen

So (list ‚Zitat 5) als "eine Liste, deren erste Element machen ist das Symbol, dessen Namen QUOTE ist und dessen zweite Element 5" bewertet.

Das Ergebnis dieser Auswertung kann als „(Zitat 5)“ geschrieben werden. „" 5" ist eine andere Art zu sagen, und der Drucker in einige (wahrscheinlich die meisten) Lisp implentations wählen, wird die kürzere Form anstelle der längere.

drucken

Wenn Sie diese Sachen durch Typisierung sind Lernen am repl müssen Sie daran denken, dass die beiden Schritte des Lesens und Auswertung verschieden sind, sondern dass die Schleife tut beide

Versuchen

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

einen Schritt zu einer Zeit zu tun, oder

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

Ihnen überzeugen, dass "(Zitat 5)" und „" 5" ist die gleiche Sache

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top