Celdas cons en Lisp
Toda lista de Lisp es en realidad una sucesión de celdas cons de dos ranuras.
;; a cons is one pair of slots: car on the left, cdr on the right
(defparameter *leg* (cons 'north 12))
(format t "head ~a for ~a blocks~%" (car *leg*) (cdr *leg*))
;; a list is conses chained through the cdr, with nil closing the chain
(defparameter *stops* (cons "market" (cons "union" (cons "civic" nil))))
(format t "first stop ~a, then ~a~%" (first *stops*) (rest *stops*))
(format t "hand-built but still a list: ~a~%"
(equal *stops* (list "market" "union" "civic")))
;; a cdr that is not a list prints with a dot between the two halves
(format t "dotted pair: ~a~%" (cons 'latitude 37.77))
Cómo funciona
(cons 'north 12)arma un solo par, que se lee de vuelta concarycdr.- Anidar tres llamadas a
consque terminan ennilconstruye una listaequala(list "market" "union" "civic"). (cons 'latitude 37.77)tiene un cdr que no es lista, así que se imprime como par punteado.
Palabras clave y builtins usados aquí
carcdrconsdefparameterequalfirstformatlistrest
El intento, en números
- Líneas
- 12
- Caracteres a escribir
- 598
- Tokens
- 80
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 64 segundos.
Paso 1 de 3 en Listas y celdas cons; paso 4 de 27 en Fundamentos del lenguaje.