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
fin

hablar [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
    fin

    genfra [perros gatos personas ovejas] [ladran maúllan gritan balan]
    gatos balan
    perros balan
    gatos maúllan
    ovejas gritan
    ovejas gritan
    personas ladran
    perros gritan

    Presione 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.