Li

Listas en Common Lisp

15 ejercicios

Acerca de Listas

Las listas son un tipo de datos muy común en Common Lisp. Están formadas por una secuencia de celdas cons. Cada car es un elemento de la lista y cada cdr es o bien la siguiente celda cons, o bien un átomo que la termina.

Una lista que termina con la lista vacía se denomina «lista propia».

Una lista que termina con un átomo que no es la lista vacía se denomina «lista punteada» (por cómo se imprime: (cons 'a 'b) ;=> (a . b)).

Una lista también puede ser circular si el cdr de alguna de sus celdas cons apunta a una celda cons posterior. Por ejemplo: (let ((x (list 1))) (setf (cdr x) x) (write x :stream t :circle t) :done). Ten cuidado al trabajar con listas circulares, ya que dejar que se impriman sin vincular *print-circle* a t provocará un bucle infinito y bloqueará el REPL (en este ejemplo, al especificar :circle t a write, *print-circle se vinculará a t).

Combinar listas

Puedes llamar a append con cualquier número de listas, incluidas 1 o 0:

(append '(a b c) '(1 2 3)) ; => (A B C 1 2 3)
(append '(a b c) '()))     ; => (A B C)
(append '(a b c))          ; => (A B C)
(append)                   ; => ()

Como alternativa a append existe nconc, que da el mismo resultado pero tiene el efecto secundario de modificar las listas. Ten cuidado al usar nconc, ya que puede tener efectos sorprendentes.

Editar en GitHub El enlace se abre en una nueva ventana o pestaña

Aprende Listas

La práctica está bloqueada

Desbloquea 5 ejercicios más para practicar Listas