Interacción con MicroMundos
Pregunta y respuesta son primitivas que se utilizan para abrir una caja de diálogo para hacer una pregunta y utilizar la respuesta que se ingresa. Después de que la pregunta fue hecha y contestada, la primitiva respuesta reporta al usuario lo que se ha ingresado. Respuesta mantiene esta información y puede usarla en forma repetida hasta que se utilice de nuevo la primitiva pregunta.
Vamos a definir el procedimiento saludo:
para saludo
pregunta [¿Cómo te llamas?]
anuncia frase "Hola respuesta
fin
Ahora escribimos en el Centro de Mando:
saludoEscribimos la respuesta en la caja de diálogo. Luego de hacer clic en Aceptar podemos usar la respuesta repetidamente. En el procedimiento anterior, respuesta es una de las entradas de frase, por eso anuncia imprime el saludo en la caja de alerta.
Escribimos en el Centro de Mando:
muestra respuestapodemos utilizar pregunta y respuesta para hacer preguntas sobre aritmética:
para adivinar
pregunta [¿ Cuánto es 5 + 9 ?]
siotro respuesta = 14 [anuncia [¡Lo lograste!]]
[anuncia [Suerte la próxima]]
fin
Si respuesta es un número, podemos utilizar respuesta como entrada para un mando de gráficos de tortuga:
ad respuestala tortuga se mueve hacia adelante la cantidad especificada por el número ingresado.Los datos que respuesta reporta son una palabra. Puede contener espacios pero sigue siendo sólo una palabra.
Es común pedir al usuario que responda "sí" o "no" a una pregunta específica. Por ejemplo:
pregunta [¿Debemos continuar?]El usuario puede escribir "s" o "sí"; o, por error, poner un espacio antes o después de la palabra "sí".
Para esos casos resulta más conveniente utilizar miembro? en lugar de = para controlar el contenido de respuesta. Las siguientes instrucciones sólo funcionarán si la respuesta es sí y si no hay ningún espacio antes o después de la palabra,
si respuesta = "sí [hacer esto]La siguiente instrucción funcionará en tanto en la respuesta haya una s, ya sea mayúscula o minúscula:
si miembro? "s respuesta [hacer esto]A veces podemos necesitar un tipo específico de respuesta. En el ejemplo siguiente, si escribimos una respuesta que no es un número, la instrucción que comienza con si respuesta > 10 producirá un mensaje de error porque > (mayor que) sólo funciona con números. Si en la caja de diálogo el usuario escribe "once" en lugar de 11 sucede los siguiente:
si respuesta > 10 [muestra [Eso es mucho]]
A > no le gusta once como entrada
Este tipo de problema podría detener un procedimiento interactivo. Para prevenirlo, puede controlar si la respuesta tiene el tipo correcto y, si no fuera así, pedir al usuario que pruebe de nuevo.
El siguiente procedimiento requiere una respuesta numérica:
para insistir :lista
pregunta :lista
si número? respuesta [alto]
insistir :lista
fin
Si la respuesta no es un número, preguntará de nuevo.
Generalmente tratamos de evitar los casos en los cuales el usuario no escribe una respuesta y simplemente presiona Aceptar. Este tipo de respuesta "vacía" puede también detener el programa. Podemos hacer que el procedimiento "de vueltas" en forma continua si el usuario no da una respuesta:
para insistir :lista
pregunta :lista
si vacía? respuesta [insistir :lista]
fin
El siguiente procedimiento requiere que la respuesta sea una sola palabra. La instrucción si controla si la respuesta contiene un espacio en blanco (carácter ASCII 32) y, si fuera así, hará la pregunta nuevamente:
para insistir :lista
pregunta :lista
si no miembro? car 32 respuesta [alto]
insistir :lista
fin
Podemos establecer el lugar en el que aparecerá la caja de diálogo mediante el mando fija.