Pregunta

Estoy tratando de aprender LISP y estaba pasando por un ejemplo de código que se usa algo similar al código siguiente:

(lista 'cita 5)

Este evalúa a '5 en el REPL. Esperaba que evaluar a (5 ') o (cita 5)

Estoy tratando esto en el CLISP REPL.

Cualquier ayuda sería apreciada.

¿Fue útil?

Solución

El bucle de lectura-evaluar-impresión lee en primer lugar, a continuación, evalúa

'cita se lee como 'el símbolo cuyo nombre es la cotización'

5 se lee como "el número 5"

Así que (lista 'cita 5) se evalúa como 'hacer una lista cuyo primer elemento es el símbolo cuyo nombre es CITA y cuyo segundo elemento es 5'.

El resultado de esta evaluación se puede escribir como "(cita 5)". "'5" es otra forma de decir esto, y la impresora en algunos (probablemente la mayoría) Lisp implentations elegirán para imprimir la forma más corta en lugar de la más larga.

Cuando estás aprendiendo estas cosas mediante la tipificación en el repl es necesario recordar que las dos etapas de leer y evaluación son distintos, pero que el bucle está haciendo tanto

Trate

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

para hacer un paso a la vez, o

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

para convencerse de que "(cita 5)" y "'5" son la misma cosa

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top