2010-12-23 30 views
5

Me estoy enseñando a mí mismo LISP con texto en línea de Estructura e Interpretación de Programas de Computadora, pero difiere en pequeños detalles con el programa Racket que estoy ejecutando para aprender LISP. Por ejemplo, SICP dice que el elemento de terminación de cualquier lista es 'nil', pero Racket no admite 'nil'. ¿Cómo creo una lista vacía en Racket para poder probar mis propios procedimientos?Creando una lista vacía en Racket

Respuesta

13

La lista vacía se denota '(). Para que pueda crear una lista como

(cons 1 (cons 2 (cons 3 '()))) 

Esto produce la lista

'(1 2 3) 
7

respuesta de Sean es correcta. Sin embargo, si desea poder escribir nil, entonces eso también es fácil. Sólo tiene que ejecutar esto una vez al inicio de la sesión:

(define nil '()) 
+0

Gracias. Por supuesto, si lo hubiera pensado, esa solución es obvia. Gracias de nuevo, David – Davrand

+3

También hay 'nulo' y/o 'vacío', dependiendo del idioma de raqueta que estés usando. –

2

En Raqueta la lista vacía se designa como sea:

'()

o como:

null

I diría que null es probablemente el más idiomático de los dos, y encaja consistentemente con el predicado null?, que prueba la lista vacía.

Ver el docs.

+3

Prefiero usar ''()' sobre 'null'. Dos razones: 1. ''()' es un datum literal, no un identificador como 'null'. Eso significa que usted sabe el contenido de ''()', a diferencia de 'nulo' que puede ser rebotado:' (let ((null #f)) null) '. 2. ''()' funciona en todas las implementaciones de Scheme. 'null' solo funciona en implementaciones (como Racket) que lo definen. –