Para acceder a los valores de una lista, use las funciones car y cdr, que devuelven el primer elemento de la lista y el resto de la lista, respectivamente. Estas funciones rompen la lista en la construcción cabeza::cola que mencioné antes.
5.3.1. Acceder al primer elemento. La función car
car devuelve el primer elemento de la lista (la cabeza de la lista). La lista necesita ser no -null. La siguiente devuelve el primer elemento de la lista:
(car '("first" 2 "third"))que es:
"first"
5.3.2. Acceder al resto de la lista. La función cdr
cdr devuelve el resto de la lista después del primer elemento (la cola de la lista). Si solo hay un elemento en la lista, devuelve una lista vacia.
(cdr '("first" 2 "third"))devuelve:
(2 "third")
donde la siguiente:
(cdr '("one and only"))devuelve:
()
5.3.3. Acceder a otros elementos de una lista
OK, bravo,podemos obtener el primer elemento en una lista, tanto como el resto de la lista, pero ¿como hacemos para acceder al segundo, tercero o otros elementos de la lista?. Existen varias funciones convenientes para acceder, por ejemplo, la cabeza de la cabeza de una cola de una lista (caadr), la cola de la cola de una lista (cddr), etc.
La convención básica para nombrar es fácil: a y d representan las cabezas y las colas de la lista, así
La convención básica para nombrar es fácil: a y d representan las cabezas y las colas de la lista, así
(car (cdr (car x) ) )primero ejecuta el paréntesis interior y de ahí hacia fuera. En el ejemplo, primero car x (el último caso), después cdr de lo anterior y al final car de lo resultante.
Se podría escribir como: (cadar x)(cadadd x): funciona de atrás a delante, es decir, primero d de x, después d del resultado, después a, después d y por último a.
Para tener práctica con las funciones de acceso a listas, intente teclear lo siguiente ( en una sola linea si está usando la consola); use diferentes variaciones de car y cdr para acceder a los diferentes elementos de la lista:
Para tener práctica con las funciones de acceso a listas, intente teclear lo siguiente ( en una sola linea si está usando la consola); use diferentes variaciones de car y cdr para acceder a los diferentes elementos de la lista:
(let* (
(x '( (1 2 (3 4 5) 6) 7 8 (9 10) )
)
)
; aquí se pone el código car/cdr
)
Intente acceder al número 3 en la lista usando solo dos llamadas a función. Si puede hacer eso, está en el camino para llegar a ser un Maestro de Script-Fu!.
Solución: [ (let* ( ( x '( (1 2 (3 4 5) 6 ) 7 8 (9 10) ) ) ) (car (caddar x) ) ) ]
(Para ver bien la solución marcar el texto entre corchetes.
Uno de los más importantes usos de la función car es acceder a los valores devueltos desde las funciones incorporadas en GIMP. Todas las funciones Gimp devuelve una lista, y, siempre, si las listas contienen solo un elemento se debe acceder con car.
Solución: [ (let* ( ( x '( (1 2 (3 4 5) 6 ) 7 8 (9 10) ) ) ) (car (caddar x) ) ) ]
(Para ver bien la solución marcar el texto entre corchetes.
Uno de los más importantes usos de la función car es acceder a los valores devueltos desde las funciones incorporadas en GIMP. Todas las funciones Gimp devuelve una lista, y, siempre, si las listas contienen solo un elemento se debe acceder con car.
5.3.4. Acceso directo a un elemento. La función nth
nth permite simplificar las expresiones de búsqueda para listas muy largas:
(nth n lista)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
Ejemplo:
Ejemplo:
(nth 2 '(1 2 3)) ; devuelve 3