Procedimientos con entrada

El procedimiento cuadrado dibuja exactamente el mismo cuadrado cada vez que es ejecutado. El procedimiento casa dibuja exactamente la misma casa. Compare esto con la primitiva adelante.

adelante 100

dibuja una línea el doble de larga que

adelante 50

Como el mando adelante toma una entrada, se lo puede utilizar para dibujar líneas de diferentes tamaños.

Si Logo espera una entrada, se queja si no se la incluye:

adelante
adelante necesita más entradas

Los procedimientos que se definen también pueden tener entradas. El procedimiento cuadrado puede ser modificado para que, en lugar de dibujar siempre un cuadrado cuyo lado mide 100, pueda dibujar cuadrados de diferentes tamaños.

para cuadrado :lado
repite 4 [adelante :lado derecha 90]
fin

Ahora cada vez que quiera ejecutar el procedimiento cuadrado, deberá especificar la medida de su lado. Podrá ejecutarlo como cualquier otro mando Logo que tome una entrada. Por ejemplo, para hacer un cuadrado cuyo lados midan 50 pasos, escriba

cuadrado 50

Para hacer un cuadrado chiquito escriba

cuadrado 10

La definición de cuadrado ilustra una regla general sobre cómo definir procedimientos con entrada. El nombre de la entrada debe ser escrito en la línea del título después del nombre del procedimiento. Se puede elegir cualquier nombre para la entrada, pero siempre debe estar precedido de los dos puntos. Se puede usar el nombre de la entrada (precedido de los dos puntos) cada vez que se quiera usar el valor de la entrada dentro de un procedimiento.

La línea del título de cuadrado le dice a Logo que el procedimiento cuadrado tiene sólo una entrada, llamada lado. El cuerpo del procedimiento usa la primitiva adelante que tiene la entrada lado. Esta instrucción dibuja una línea cuya medida es :lado.

Cuando se define un procedimiento con una entrada, esta entrada no tiene valor. Recién cuando el procedimento se ejecuta se conoce el valor de la entrada. Por esta razón la entrada siempre debe tener un nombre.

Se pueden definir procedimientos Logo con más de una entrada. Por ejemplo, un procedimiento que necesita más de una entrada es aquel que dibuja un rectángulo:

para rectángulo :alto :ancho
repite 2 [adelante :alto derecha 90 adelante :ancho de 90]
fin

Para ejecutar rectángulo, es necesario escribir el nombre seguido de dos valores:

rectángulo 50 100

El siguiente ejemplo muestra de nuevo el uso de superprocedimientos y subprocedimientos. Podemos cambiar la definición anterior de casa para poder dibujar casas de diferentes tamaños:

para casa :tamaño
cuadrado :tamaño
adelante :tamaño
derecha 30
triángulo :tamaño
fin

Entonces Triángulo, puede ser definido de la siguiente manera:

para triángulo :lado
repite 3 [adelante :lado derecha 60]
fin

Para dibujar una casa de tamaño 150, escriba

casa 150

Tenga en cuenta que, aunque cuadrado fue definido con una entrada llamada lado, se ejecutará dentro de casa con la entrada llamada tamaño. El nombre de la entrada es solo un contenedor esperando por un valor.

En el ejemplo anterior, ¿cómo hace Logo para saber que, tanto cuadrado como adelante y triángulo, tienen 150 como entrada? 150 es "aquella cosa" llamada tamaño.

Cuando Logo ve la definición para cuadrado, busca la definición de cuadrado y ejecuta este procedimiento con 150 como entrada.

Luego va a adelante con 150 como entrada y ejecuta después derecha 30. Cuando llega a triángulo, busca la definición de triángulo y ejecuta este procedimiento.

Luego va a la siguiente instrucción en casa que es fin. Ahora casa está terminada.

Cuando se da una entrada a un superprocedimiento, éste puede transmitir la entrada a los subprocedimientos.

Una manera de explicar la forma cómo los procedimientos pueden transmitirse entre ellos las entradas manteniendo los valores de sus propias entradas, es pensando en las entradas como nombres: cada procedimiento tiene su propia biblioteca de nombres (Abelson, 1982). Como los nombres de las entradas son privados, diferentes procedimientos pueden usar el mismo nombre para una entrada sin que haya confusión acerca de su valor. Cuando Logo ejecuta un procedimiento, el procedimiento establece una biblioteca privada que contiene los nombres de las entradas que hay en la definición del procedimiento, asociados con los valores dados al momento de llamar al procedimiento. Cuando el procedimiento ejecuta una instrucción que contiene el nombre de la entrada, busca en su bliblioteca privada el valor del nombre. Este es el motivo por el cual el mismo nombre puede estar en dos diferentes bibliotecas y tener diferente información.

La terminología de las ciencia computacionales se refiere a las entradas como "variables locales" del procedimiento dentro del cual han sido definidas. La importancia de los nombres de entrada privados es que ofrecen la posibilidad de ejecutar un procedimiento sin tener que preocuparse por los detalles de su definición. De esta manera podemos concentrarnos en lo que hace el procedimiento. Cuando se define el procedimiento casa, es posible pensar en cuadrado como una "caja negra" que dibuja un cuadrado, sin tener que preocuparse por el nombre que usa como entrada.


Abelson, H. (1982). Apple Logo. Peterborough, NH: Byte Publications Inc.