scheme - español - ¿Valor nulo en mit-esquema?
sicp pdf (4)
(list) ''() y () puede representar nulo. por ejemplo,
(define (transpose mat) (accumulate-n cons () mat))
o sustituya () con ''() o (lista).
¿Puede alguien decirme cuál es la representación de valor nulo en el esquema mit? En el libro SICP, debería ser "nil" pero no funciona. Gracias.
Ahí está la historia. visite http://web.archive.org/web/20070808004043/http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions
Original (roto): http://wiki.wordaligned.org/sicp/published/FrequentlyAskedQuestions
Texto de las preguntas frecuentes anteriores (en caso de rotura de Internet Archive):
¿Por qué "nil" no funciona?
La respuesta rápida es: nil ya no es parte de Scheme, usa ''()
lugar. La respuesta larga sigue ...
Los primeros ejemplos en el Capítulo 2 usan nil
como terminador de lista, pero cuando estos ejemplos se ejecutan utilizando (por ejemplo) el esquema MIT, se obtiene:
;Unbound variable: nil
De manera similar, usar ()
o null
en lugar de nil
puede funcionar en algunas implementaciones, pero ninguna es portátil. El libro del mago aborda el problema en esta nota al pie
Es notable la cantidad de energía en la estandarización de los dialectos de Lisp que se ha disipado en argumentos que literalmente no son nada: ¿No debería ser un nombre común? ¿Debe el valor de nil ser un símbolo? ¿Debería ser una lista? ¿Debería ser un par? En Esquema, nil es un nombre ordinario, que usamos en esta sección como una variable cuyo valor es el marcador de fin de lista (al igual que true es una variable ordinaria que tiene un valor verdadero). Otros dialectos de Lisp, incluido Common Lisp, tratan a nil como un símbolo especial. Los autores de este libro, que han sufrido demasiadas peleas de estandarización lingüística, desean evitar el problema completo. Una vez que hemos introducido la cita en la sección 2.3, indicaremos la lista vacía como ''() y prescindiremos de la variable nil por completo.
Desde que se escribió esto, nil se ha eliminado del estándar Scheme, pero la conclusión es: use ''(), no nil. En un correo electrónico a la lista de cuentas, Mike señala:
Es una cosa problemática, este negocio nil / null / ''(). Scheme48 y scm no definen nulo, y la astucia lo define pero como un procedimiento similar al nulo común de lisp (para ir con su nulo que se comporta como el nil de cl, que a su vez es distinto de ''(), quizás esto tenga algo que ver con los planes de fsf para re-hacer emacs en guile). Creo que la mejor opción es reemplazar el uso de los autores de nil con ''().
[Copiado con solo un toque de limpieza tipográfica, para que coincida mejor con Markdown y la entrada ASCII habitual en los idiomas / implementaciones en cuestión.]
Utilizo MIT/GNU Scheme microcode 15.3
, ()
y ''()
MIT/GNU Scheme microcode 15.3
, todo funciona. (como dijiste, nil
y null
no funciona).
1 ]=> ()
;Value: ()
1 ]=> ''()
;Value: ()
1 ]=> (cons 1 ())
;Value 2: (1)
1 ]=> (cons 1 ''())
;Value 3: (1)
''()
debería funcionar. Básicamente, nil en esquema es la lista vacía, por lo que citar una lista vacía le da nulo.