Existen tres funciones básicas para acceder a los términos de
una lista: CAR, QUOTE y CDR.
Funciones CAR y QUOTE:
CAR-
- CAR admite un único argumento que debe ser una lista o una
expresión cuyo valor sea una lista y devuelve el primer elemento de
dicha lista. Como LISP siempre interpreta una lista como una llamada a una
función, necesitamos una manera de pasar una lista a CAR sin que LISP trate de procesarla
como llamada a función.
QUOTE -
- Con este objetivo se suministra la función
QUOTE . Una lista dentro de una función QUOTE no se
tratará de evaluar como llamada a una función. La llamada a la
función QUOTE se puede abreviar utilizando el signo
apóstrofe < ’ >.
Funciones CDR y NTH:
CDR-
- CDR recibe también una lista y devuelve
el resto de la lista después de eliminar el primer elemento (CAR
lista). Por lo tanto puede contemplarse como la función
complementaria de CAR. Una manera de interpretar una lista en LISP es
como la conjunción de un CAR y un CDR. Se podrá
acceder a cualquier término de una lista mediante los anidamientos
apropiados de CAR y CDR.
- (CAR lista) ;primer término
- (CAR (CDR lista)) ;segundo término
- (CAR (CDR (CDR lista))) ;tercer término
- y así sucesivamente... Para simplificar las expresiones se permite
crear nombres compuestos para anidamientos de CAR y CDR de la
siguiente manera:
- comenzando por una primera letra C
- una letra A por cada CAR o una D por cada
CDR
- terminando con una letra R
- así (CAR (CDR (CDR lista))) sería lo mismo que
(CADDR lista).
- De esta manera podemos construir hasta 28 funciones distintas para acceso a
listas. Según Johnson* estas 28 concatenaciones
se pueden dividir en cuatro grupos, tomando como base la profundidad a que
pueden acceder en listas anidadas en varios niveles.
-
Funciones de acceso al nivel superior:
-
-
-
Funciones de acceso al segundo nivel de anidamiento:
-
-
-
Funciones de acceso al tercer nivel de anidamiento:
-
-
-
Funciones de acceso al cuarto nivel de anidamiento:
-
-
- Por supuesto, que estas funciones pueden a su vez combinarse para acceder a
niveles aún más profundos de anidación.
-
NTH
-
- NTH permite simplificar estas expresiones para
listas muy largas:
- Donde el argumento n es el número del elemento que debe
devolverse (cero es el primer elemento). Si n es mayor que el
número de elemento mayor de la lista, NTH devuelve nil
.
EJEMPLOS:
De lo antes expuesto resultaría:
_$ (car '(a b c)) ;Caso de una lista normal
A
_$ (cdr '(a b c))
(B C)
_$ (cddr '(a b c))
(D)
_$ (cdddr '(a b c)) ;el último objeto es una lista vacía
nil
_$ (car '(a b . c)) ;Caso en que la lista termina en un par punteado
A
_$ (cdr '(a b . c))
(B . C)
_$ (cddr '(a b . c))
C ;el último objeto de la lista no es un CONS
_$ (cdddr '(a b . c)) ;lo que provoca un error
; error: bad argument type: consp C
_1$
* Johnson, Nelson. AutoCAD: Manual de Referencia.
Osborne/McGraw-Hill, Madrid, 1990. ISBN 84-7615-451-8
|