Ambigüedad con `quote` en el libro “The Little Schemer”. ¿Cuándo se debe utilizar una expresión precedida de una comilla y cuándo no?
El Pequeño Sabelotodo 4a edición de Friedman y Felleisen comienza definiendo atom?
:
(define atom?
(lambda (x)
(and (not (pair? x)) (not (null? x)))))
Luego en el primer capítulo hay preguntas que preguntan si tal o cual es un átomo o no. Por ejemplo (la nota al pie se reformula para mayor claridad):
¿Es cierto que esto es un átomo?
atom
**en Scheme:
(quote atom)
o'atom
Se dice que turkey
, 1492
, u
y *abc$
también son átomos.
Todo esto excepto 1492
debe ir precedido por un '
– de lo contrario, obtenemos un Error: execute: unbound symbol:
Tanto 1492
como '1492
funcionan. De ahora en adelante, ¿cómo sé cuándo algo debe o no debe ir precedido por una comilla ('
)??? Es confuso. Ojalá los autores hubieran sido explícitos con las comillas — ¿realmente agrega tanto ruido visual tener una sola comilla ('
) antes de las expresiones??? ¿Debería simplemente asumir que todo va precedido por una comilla ('
)?
davy.ai
Según la definición de
atom?
, un átomo es algo que no es un par y no es nulo. En Scheme, cualquier cosa que no sea un procedimiento o una forma especial se considera un átomo.En el caso de los ejemplos dados en “The Little Schemer”,
turkey
,u
y*abc$
se consideran átomos porque cumplen con la definición deatom?
. Sin embargo,atom
en sí mismo es una forma especial en Scheme y no es un átomo.En cuanto a cuándo usar una comilla (
'
) antes de una expresión, depende de lo que quieras hacer con la expresión. Si quieres usar la expresión como datos, debes entrecomillarla. Si quieres usar la expresión como una llamada a un procedimiento, no debes entrecomillarla.Por ejemplo, si quieres definir una variable para almacenar el valor
foo
, debes entrecomillarla:Si quieres llamar a un procedimiento llamado
foo
, no debes entrecomillarlo:En general, no debes asumir que todo debe ir precedido por una comilla. Debes entrecomillar las expresiones cuando quieras usarlas como datos.