El Manejo de los Procesos: el Centro de Mando
Cuando se escriben palabras en el Centro de Mando se está diciendo a Logo que las ejecute como una instrucción. Generalmente Logo "lee" primero una instrucción y la ejecuta, antes de "leer" la siguiente instrucción. Cuando se escriben instrucciones en el Centro de Mando, se debe presionar la tecla Intro para que se ejecute o active una línea. Un punto grande aparece al final de la línea: indica que MicroMundos Logo está ocupado ejecutando esa instrucción. Este punto indica además que el Centro de Mando no aceptará ninguna instrucción hasta que haya finalizado la que está activa.
Escriba estas instrucciones en el Centro de Mando. Necesitará tener dos tortugas en la página:
t1, repite 100 [adelante 1] t2, repite 100 [adelante 1]
Presione Intro.Las instrucciones de repite se ejecutan una detrás de la otra.
Existen tres primitivas que permiten cambiar el flujo secuencial de estas instrucciones: lanza, porsiempre y cuando. Lanza resulta fundamental para definir las otras dos primitivas. En realidad, como se podrá comprobar en seguida, porsiempre y cuando podrían ser procedimientos Logo que contienen el mando lanza.
Cuando se usa la primitiva lanza, se está comenzando un proceso independiente. Esto resulta evidente en el Centro de Mando. Cuando se escribe una instrucción que comienza con lanza, el punto al final de la línea desaparece y se puede ejecutar otra instrucción sin problemas.
Lanza toma como entrada una lista de instrucciones y la ejecuta como si las instrucciones hubiesen sido escritas en una línea. La diferencia radica en que estas instrucciones se ejecutan como un proceso independiente y MicroMundos no espera a que terminen para ir a la próxima instrucción.
Escriba de nuevo las instrucciones anteriores, pero esta vez utilice el mando lanza. Escriba las siguientes instrucciones en una línea:
t1, lanza [repite 100 [adelante 1]] t2, lanza [repite 100 [adelante 1]]
Presione la tecla Intro.El punto aparece sólo un momento, mientras Micromuntos está "leyendo" cada instrucción; luego desaparece. En resumen, se puede usar lanza para comenzar una instrucción que tarda mucho tiempo en ejecutarse y, mientras se está ejecutando, se puede comenzar otra cosa.
He aquí un ejemplo.
t1, cp
repite 360 [adelante 1] repite 360 [derecha 1]Estas instrucciones se leen una por vez. La tortuga se mueve hacia adelante 360 pasos y luego hace una vuelta completa. Ahora pruebe las mismas instrucciones con lanza:
lanza [repite 360 [adelante 1]] lanza [repite 360 [derecha 1]]La tortuga dibuja un círculo.
Si le interesa la geometría, quizás quiera examinar el proceso más a fondo. Se trata del mismo círculo que se dibuja con:
repite 360 [adelante 1 derecha 1]Para conocer más acerca de estos círculos, ver el ensayo activo de Resnick and Silverman, Going in circles, http://el.www.media.mit.edu/groups/el/projects/circles/contents.html, o su traducción, el proyecto ensayo, que se encuentra en la carpeta Ejemplos de MicroMundos Pro.
Las instrucciones anteriores lanzan dos procesos independientes.
Pruebe de nuevo las instrucciones mientras mira el área de Procesos. El icono de Lanza que precede a la instrucción significa que el proceso ha sido lanzado. El número que sigue a la instrucción representa el número de proceso interno. Porsiempre es en realidad un derivado de lanza. Las instrucciones que siguen son iguales:
porsiempre [adelante 1]
lanza [repite 99999 [adelante 1]]
Porsiempre repite una instrucción en forma continua, permitiendo a MicroMundos ejecutar otra instrucción. En realidad, sólo lanza un proceso. Pruebe hacer el círculo, usando esta vez en las instrucciones porsiempre en lugar de lanza:
porsiempre [adelante 1] porsiempre [derecha 1]
Ahora el icono que precede la instrucción en el área de Proceso es el signo de infinito, que significa que cada proceso ha sido lanzado porsiempre. Se puede detener una instrucción porsiempre con cualquiera de las siguientes acciones:
- Haciendo clic en el botón Detener todo.
- Haciendo clic en el proceso con el botón derecho del ratón dentro del área de Procesos y seleccionando Detener.
- Seleccionando Detener todo en el menú Edición.
- Presionando las teclas Control+Inter.
- Escribiendo en el Centro de Mando detén [instrucción para detén].
El siguiente es un pequeño experimento que puede utilizar para probar que los procesos son realmente paralelos. Por otro lado, ilustra acerca de cómo Logo implementa los procesos. En el Centro de Mando, presione la tecla Intro después de cada instrucción consecutiva porsiempre:
porsiempre [adelante 1]Presione Intro.
porsiempre [derecha 1]
porsiempre [izquierda 1]¡La tortuga se nueve en línea recta!
Logo usa el paradigma Multiple Instruction Multiple Data (MIMD). Significa en español Instrucciones Múltiples Datos Múltiples. En el ejemplo anterior, un mando de cada proceso se ejecuta a la vez; de esa forma las instrucciones quedan sincronizadas.
Cuando es la otra primitiva (además de lanza y porsiempre) que comienza un proceso independiente. De la misma forma que porsiempre, cuando puede ser definido en los términos del mando lanza. Esta línea
cuando [coory > 100] [atrás 100]es lo mismo que:
lanza [repite 99999 [esperahasta [coory > 100] atrás 100 ]]Las entradas para el mando cuando son dos listas de instrucciones. La primera lista es una condición que debe reportar cierto o falso. En el momento que la instrucción reporte cierto, se ejecutará la siguiente lista de instrucciones. Hay que tener en cuenta que, cuando la condición se transforme en cierta, la segunda lista de instrucciones se ejecutará sólo una vez; no lo hará en forma continua.
Tratando de entender el mando cuando en los términos de lanza, nos encontramos con el hecho de que la cláusula condicional se ejecuta en forma repetitiva. Desde que ha sido lanzada, otras instrucciones se ejecutan al mismo tiempo. Para entender cómo funciona cuando, pruebe lo siguiente:
cuando [coory > 100][atrás 100]
repite 1000 [adelante 1]
La primera línea lanza un proceso que controla si la coordenada y de la tortuga activa es mayor que 100. Cuando la condición se transforma en cierta, la tortuga retrocede 100 pasos. La segunda línea ejecuta una instrucción que mueve a la tortuga hacia adelante en forma repetitiva.
Tenga en cuenta que el mando cuando lanza sólo un proceso. Puede controlar esto en el área de Procesos. Para detener el proceso cuando, puede realizar cualquiera de estas acciones:
- Hacer clic en el botón Detener todo.
- Hacer clic en el proceso con el botón derecho del ratón dentro del área de Procesos y seleccionar Detener.
- Escribir detén [coory > 100]. La entrada para detén es la primera entrada de cuando.
La instrucción cuando es tramposa, ya que no muestra ninguna señal visual mientras se ejecuta otra instrucción. Si no se lo detiene en forma explícita, este proceso puede sorprender más tarde. Por esta razón, resulta conveniente controlar en forma regular el área de Procesos.