¿Por qué (lista 'cita' x) evaluar a 'x y no (' x) o (cita 'x)?
-
26-09-2019 - |
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.
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