La función CONS
CONS es el constructor de lista básico. Construye listas insertando elementos en listas existentes (incluso vacías). El nuevo elemento 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 lugar
del argumento lista, en cuyo caso construye una estructura denominada
par punteado. El CDR de un par punteado es el segundo término
ya 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 las funciones LISP es una función no destructiva, es decir que no altera los argumentos que recibe. Así que para conservar la lista con el nuevo primer elemento, será necesario utilizar SETQ. La función más general para incorporar nuevos elementos a una lista sería entonces:
(setq nombre_lista (cons nuevo_elemento nombre_lista))
donde nombre_lista sería el símbolo asociado al
objeto lista. la función opera aunque nombre_lista no hubiera
sido previamente asociado a una lista, pues no debemos olvidar que un
símbolo no asociado se evalúa como NIL, que es, a su
vez, 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 combina
en una lista. Admite tanto átomos como listas. Si uno de los agumentos
es una lista vacía NIL aparecerá como uno de los
té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 de
anidación de cada una de las listas que recibe para combinar todas en
una misma lista. Si una de las listas que recibe está vacía esta
lista 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 sublistas vacías:
_$ (apply 'append '(("M") ("a") nil ("r") ("i") nil))
("M" "a" "r" "i")