Existen tres funciones básicas para acceder a los términos deuna lista: CAR, QUOTE y CDR.
Funciones CAR y QUOTE:
CAR
- CAR admite un único argumento que debe ser una lista o unaexpresión cuyo valor sea una lista y devuelve el primer elemento dedicha lista. Como LISP siempre interpreta una lista como una llamada a unafunció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 setratará de evaluar como llamada a una función. La llamada a lafunción QUOTE se puede abreviar utilizando el signoapóstrofe < ’ >.
Funciones CDR y NTH:
- CDR recibe también una lista y devuelveel resto de la lista después de eliminar el primer elemento (CARlista). Por lo tanto puede contemplarse como la funcióncomplementaria de CAR. Una manera de interpretar una lista en LISP escomo la conjunción de un CAR y un CDR. Se podráacceder a cualquier término de una lista mediante los anidamientosapropiados de CAR y CDR.
- (CAR lista) ;primer término
- (CAR (CDR lista)) ;segundo término
- (CAR (CDR (CDR lista))) ;tercer término
- 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).
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 aniveles aún más profundos de anidación.
NTH
- NTH permite simplificar estas expresiones paralistas muy largas:
- (nth n lista)
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