Le hemos entrenado en variables y funciones, y ahora, entramos en el lúgubre pantano de las listas Scheme.
Definir una lista
Antes de que hablamos más sobre las listas, es necesario que sepa la diferencia entre valores atómicos y listas.
Ya ha visto los valores atómicos cuando inicializamos variables en la lección anterior. Un valor atómico es un valor simple. Así, por ejemplo, podemos asignar a la variable «x» el valor simple de 8 en la declaración siguiente:
(let* ( (x 8) ) x)
(Añadimos la expresión x al final para imprimir el valor asignado a x normalmente, no necesitará hacer esto. Note como let* opera justo como una función: El valor de la última declaración es el valor devuelto).
Una variable puede, tambien, referirse a una lista de valores, casi como un valor simple. Para asignar a la variable x , la lista de valores 1, 3, 5, tecleamos:
(let* ( (x ‘(1 3 5))) x)
Intente teclear ambas declaraciones en la consola de ScriptFu y verá como contesta. Cuando teclea la primera declaración, responde con el resultado:
8
Cuando teclea la otra declaración, responde con el siguiente resultado:
(1 3 5)
Cuando responde con el valor 8 está informando que x contiene el valor atómico 8. Cuando responde con (1 3 5), entonces, está informando que x no contiene un valor simple, sino una lista de valores. Note que no hay comillas en nuestra declaración o en la asignación de la lista, ni en el resultado impreso. La sintaxis para definir una lista es:
‘(a b c)
donde a, b, y c son literales. Usamos el apóstrofe (‘) para indicar que lo que sigue entre paréntesis es una lista de valores literales, casí como una función o expresión. Una lista vacia puede definirse como:
‘()
o simplemente:
()
Las listas pueden contener valores atómicos, así como otras listas:
(let*
( (x ‘(«The GIMP» (1 2 3) («is» («great» () ) ) ) ) ) x ) |
Note que después del primer apóstrofe, no necesita usar un apóstrofe cuando defina las listas internas. Adelante, copie la declaración en la consola de ScriptFu y mire que devuelve.
Notará que el resultado devuelto no es una lista de simples valores atómicos; casí es una lista de un literal («The GIMP»), la lista (1 2 3), etc.
¿Como se representan las listas?
Es útil pensar que las listas están compuestas de una «cabeza» y de una «cola». La cabeza es el primer elemento de la lista, la cola es el resto de la lista. Verá porque esto es importante cuando tratemos como añadir listas y como acceder elementos en la lista.
Crear listas mediante concatenación (Lafunción cons)
Una de las funciones más comunes que encontrará es la función cons. Toma un valor y lo situa en el segundo argumento, una lista. En la sección previa, sugerí que piense que una lista está compuesta de un elemento (la cabeza) y el resto de la lista (la cola). Es, exactamente, como cons funciona añade un elemento a la cabeza de la lista. Puede crear una lista como sigue:
(cons 1 ‘(2 3 4) )
El resultado es la lista (1 2 3 4).
También, podrías crear una lista con un elemento:
(cons 1 () )
Puede usar, previamente, variables declaradas en lugar de literales, como cabría esperar.