2.2.3. Funciones de Construcción de Listas


La función CONS

CONS es el constructor de lista básico. Construye listasinsertando elementos en listas existentes (incluso vacías). El nuevoelemento ocupa el primer lugar de la lista (CAR lista).

(cons nuevo_elemento lista)

El nuevo_elemento puede ser un átomo o una lista.
La función CONS también acepta un átomo en lugardel argumento lista, en cuyo caso construye una estructura denominadapar punteado. El CDR de un par punteado es el segundo términoya extraído de la lista, es decir, sin los paréntesis.
Ejemplo: (cons 'a 'b) devuelve (A . B) y (cdr'(a . b)) devuelve B.

Debe tenerse en cuenta que CONS, al igual que casi todas lasfunciones LISP es una función no destructiva, es decir que no altera losargumentos que recibe. Así que para conservar la lista con el nuevoprimer elemento, será necesario utilizar SETQ. Lafunción más general para incorporar nuevos elementos a una listasería entonces:

(setq nombre_lista (cons nuevo_elemento nombre_lista))

donde nombre_lista sería el símbolo asociado alobjeto lista. la función opera aunque nombre_lista no hubierasido previamente asociado a una lista, pues no debemos olvidar que unsímbolo no asociado se evalúa como NIL, que es, a suvez, equivalente a una lista vacía.
Ejemplo:

_$ (cons 'a 'b)
(A . B)
_$ (cons 'a (cons 'b (cons 'c '())))
(A B C)
_$ (cons 'a '(b c d))
(A B C D)

Funciones de ejemplo usando CONS/CAR/CDR

La función LIST

(list expr ...)

LIST Recupera cualquier número de expresiones y las combinaen una lista. Admite tanto átomos como listas. Si uno de los agumentoses una lista vacía NIL aparecerá como uno de lostérminos de la lista.
Ejemplo:

_$ (list 3 4 'a (car '(b . c)) (+ 6 -2))
(3 4 A B 4)
_$ (list (list 'a 'b) (list 'c 'd 'e))
((A B) (C D E))

La función APPEND

(append lista lista ...)

APPEND Se utiliza para combinar listas. Elimina el primer nivel deanidación de cada una de las listas que recibe para combinar todas enuna misma lista. Si una de las listas que recibe está vacía estalista no aparecerá en la lista resultante.
Ejemplo:

_$ (append '(a b c) '(d e f) '() '(g))
(A B C D E F G)

Una muestra de la utilización de APPEND para eliminar las sublistasvacías:

_$ (apply 'append '(("M") ("a") nil ("r") ("i") nil))
("M" "a" "r" "i")