Programar: Listas

Un aspecto poderoso del lenguaje Logo es que permite trabajar con listas. Una lista es una colección ordenada de números, palabras y listas. Con las listas podemos construir estructuras de datos que incluyen otras palabras y listas.

El reportero cuenta puede ser utilizado para contar el número de elementos de una palabra o una lista:

muestra cuenta [1 [1 2][17 [17 2]]]
3

La lista [1 [1 2][17 [17 2]]] contiene 3 elementos, no 6: el segundo y el tercer elemento son también listas:

1
[1 2]
[17 [17 2]]

Los reporteros Logo que extraen elementos de las palabras pueden hacer lo mismo con las listas:

Primitiva

definición

ejemplo

reporta

primero Reporta el primer elemento de una lista. primero [1 [1 2][17 [17 2]]] 1
último Reporta el último elemento de una lista. último [1 [1 2][17 [17 2]]] [17 [17 2]]
menosprimero Reporta la lista sin su primer elemento. menosprimero [1 [1 2][17 [17 2]]] [[1 2] [17 [17 2]]]
menosúltimo Reporta la lista sin su último elemento. menosúltimo [1 [1 2][17 [17 2]]] [1 [1 2]]
ítem Reporta el elemento especificado de la lista ítem 3 [1 [1 2][17 [17 2]]] [17 [17 2]]

Una lista vacía no contiene elementos e imprime una línea en blanco:

muestra [ ]

Resulta importante tener en cuenta que Logo no reconoce de la misma manera una lista vacía y una palabra vacía, aunque devuelva lo mismo. Esto se percibe mejor cuando una lista que contiene una sola palabra es escrita de la misma manera que una palabra, aunque Logo las considere dos tipos diferentes de datos.

muestra "alegre
alegre
muestra [alegre]
alegre
muestra "alegre = [alegre]
falso

El procedimiento triángulo puede ser modificado para que su entrada sea una palabra o una lista:

para triángulo :datos
si vacía? :datos [alto]
muestra :datos
triángulo menosprimero :datos
fin

triángulo [los canguros saltan alto]
los canguros saltan alto
canguros saltan alto
saltan alto
alto

Observe que el procedimiento utiliza el reportero vacía? Vacía? controla si la entrada es una palabra o una lista vacía. (ver Breve Tabla de Predicados Propios).

Hay varias primitivas que combinan elementos para formar una lista. La más práctica es frase. Frase combina en una lista todos los elementos de su entrada.

muestra frase [Yo soy] [muy feliz]
Yo soy muy feliz

Otro reportero Logo que combina sus entradas en una lista es lista. La diferencia entre frase y lista es que lista mantiene la estructura de los elementos de la entrada. Por ejemplo:

muestra lista [Yo soy] [muy feliz]
[Yo soy] [muy feliz]

En programas más interactivos frase es utilizada para mostrar palabras con el objeto de que no aparezcan los corchetes en las listas individuales.

Otras dos primitivas combinan elementos en las listas, ponprimero y ponúltimo.

Ppr (abreviatura de pon primero) devuelve la lista creada al añadir la primera entrada al comienzo de la segunda entrada. La segunda entrada debe ser una lista.

muestra ppr "internet [[java html] [www] [gif jpeg]]
internet [java html] [www] [gif jpeg]

Púl (abreviatura de pon último) devuelve la lista creada al añadir la primera entrada al final de la segunda. La segunda entrada debe ser una lista.

muestra púl "internet [[java html] [www] [gif jpeg]]
[java html] [www] [gif jpeg] internet

Estas tres primitivas, ppr, púl y lista son muy importante cuando se utilizan las listas como estructuras de datos que deben ser manipuladas.

En resumen, el siguiente cuadro compara cuatro primitivas que combinan palabras y listas. Observe que los corchetes exteriores aparecen en el cuadro aunque no aparecen cuando el mando muestra es utilizado en el Centro de Mando.

Reportero

entrada 1

entrada 2

reporta

ponprimero "caballo "caballo error
lista "vaca "caballo [vaca caballo]
ponúltimo "vaca "caballo error
frase "vaca "caballo [vaca caballo]
ponprimero "Logo [es lindo] [Logo es lindo]
lista "Logo [es lindo] [Logo [es lindo]]
ponúltimo "Logo [es lindo] [es lindo Logo]
frase "Logo [es lindo] [Logo es lindo]
ponprimero [Yo soy] [muy feliz] [[Yo soy] muy feliz]
lista [Yo soy] [muy feliz] [[Yo soy] [muy feliz]]
ponúltimo [Yo soy] [muy feliz] [muy feliz [Yo soy]]
frase [Yo soy] [muy feliz] [Yo soy muy feliz]
ponprimero "internet [ ] [internet]
lista "internet [ ] [internet [ ] ]
ponúltimo "internet [ ] [internet]
frase "internet [ ] [internet]