Generadores de Frases
Este es un programa muy simple que junta palabras con el objeto de hacer frases:
para hablar :animales :sonidos
si o vacia? :animales vacía? :sonidos
[escribe [¡Esto es todo!] alto]
escribe frase primero :animales primero :sonidos
hablar menosprimero :animales menosprimero :sonidos
finhablar [Perros Gatos Ovejas] [Ladran Maúllan Balan]
Perros Ladran
Gatos Maúllan
Ovejas Balan
¡Esto es todo!
Hablar es un procedimiento recursivo. Con cada llamada recursiva la lista se acorta a medida que se le saca el primer elemento.
Observe la línea
si o vacia? :animales vacía? :sonidos
[escribe [¡Esto es todo!] alto]
El reportero o es un predicado. Toma las dos entradas y controla si alguna de ellas es cierta. En este ejemplo controla si el contenido de :animales o el contenido de :sonidos están vacíos. Si este fuera el caso, escribe muestra su entrada y se detiene el procedimiento.
Este tipo de predicado se llama operación lógica. Las operaciones lógicas son predicados cuyas entradas pueden ser ciertas o falsas. O devuelve cierto si una de sus entradas es cierta. Hay otras dos operaciones lógicas: y y no. Y devuelve cierto si todas sus entradas son ciertas. No devuelve la lógica inversa de sus entradas; esto es, si la entrada es cierta, no devuelve falso y viceversa. Vamos a cambiar hablar para que los resultados a veces aparezcan tontos: un generador de frases al azar. En lugar de dos listas que se correspondan elemento por elemento, podemos pedir a Logo que elija al azar un elemento de cada lista. El reportero elige devuelve un elemento al azar de una palabra o de una lista. Como esto va a generar combinaciones tontas, vamos a sacar la línea si para dejar que se ejecute indefinidamente. También vamos a sacar menosprimero de las entradas en la línea recursiva, ya que deseamos mantener las mismas entradas. Genfra (abreviatura de Generador de Frases) puede ser definido de la siguiente manera:
para genfra :sustantivos :verbos
escribe frase elige :sustantivos elige :verbos
genfra :sustantivos :verbos
fingenfra [perros gatos personas ovejas] [ladran maúllan gritan balan]
gatos balan
perros balan
gatos maúllan
ovejas gritan
ovejas gritan
personas ladran
perros gritanPresione Ctrl+Supr para detenerlo.
También se puede ejecutar este procedimiento desde un botón, simplemente sacando las entradas y la línea recursiva; de esta forma genfra será un procedimiento de una sola línea:
para genfra
escribe frase elige [perros gatos personas ovejas] elige [ladran maúllan gritan balan]
fin
Fije el botón en Muchas Veces.
Otra forma de guardar las entradas es escribiéndolas en dos cajas de texto diferentes, llamadas sustantivos y verbos respectivamente. Cada caja de texto actúa como un contenedor para estas palabras:
![]()
El procedimiento deberá ser corregido de la siguiente manera:
para genfra2
escribe frase eligelínea "sustantivos eligelínea "verbos
genfra2
fin
El procedimiento genfra2 no necesita entradas porque sustantivos y verbos son los contenidos de la caja de texto. Tenga en cuenta que, antes de ejecutar el procedimiento genfra2, debe hacer clic dentro de una caja de texto que no sea ni sustantivos ni verbos.