Construir listas en Lisp
Hacer crecer una lista de pistas con push y luego enderezarla con reverse y append.
;; push grows a list at the front, so the additions come out backward
(defparameter *playlist* (list "aja" "deacon blues"))
(push "peg" *playlist*)
(push "home at last" *playlist*)
;; reverse undoes that order and append joins on a closing track
(defparameter *encore* (append (reverse *playlist*) (list "josie")))
(defun announce (tracks)
(format t "~a tracks, opening with ~a~%" (length tracks) (first tracks))
(dolist (track tracks)
(format t " - ~a~%" track)))
(announce *encore*)
Cómo funciona
- Cada
pushagrega al frente de*playlist*, así que las pistas se apilan al revés. (append (reverse *playlist*) (list "josie"))restaura el orden y suma una pista de cierre.announceinformalengthyfirst, y luego recorre toda la lista condolist.
Palabras clave y builtins usados aquí
appenddefparameterdefundolistfirstformatlengthlistpushreverse
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 488
- Tokens
- 73
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 58 segundos.
Paso 2 de 3 en Listas y celdas cons; paso 5 de 27 en Fundamentos del lenguaje.