Domanda

Sto cercando di imparare LISP e stavo esaminando un esempio di codice in cui viene utilizzato qualcosa di simile al seguente codice:

(elenco 'citazione 5)

Questo vale '5 nel REPL.Mi aspettavo che valutasse ('5) o (citazione 5)

Lo sto provando nel CLISP REPL.

Qualsiasi aiuto sarebbe apprezzato.

È stato utile?

Soluzione

Il ciclo lettura-valutazione-stampa prima legge, poi valuta

'quote viene letto come "il simbolo il cui nome è QUOTE"

5 viene letto come "il numero 5"

Quindi (list 'quote 5) viene valutata come "crea una lista il cui primo elemento è il simbolo il cui nome è QUOTE e il cui secondo elemento è 5".

Il risultato di questa valutazione può essere scritto come "(citazione 5)"."'5" è un altro modo per dirlo, e la stampante in alcune (probabilmente la maggior parte) implementazioni lisp sceglierà di stampare la forma più breve invece di quella più lunga.

Quando stai imparando questa roba digitando la repl devi ricordare che i due passaggi di lettura e valutazione sono distinti, ma che il ciclo sta facendo entrambe

Tentativo

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

fare un passo alla volta, o

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

per convincerti che "(citazione 5)" e "'5" sono la stessa cosa

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top