Procedimientos que Reportan

En Vocabulario, hemos explicado que las primitivas pueden ser mandos o reporteros. Muchos de los procedimientos en las secciones anteriores han sido mandos. También podemos definir procedimientos que son reporteros. Para hacerlo debemos utilizar el mando reporta.

La utilidad de definir reporteros resulta obvia cuando nos manejamos con números. Por ejemplo, vamos a utilizar muestra para definir un procedimiento que eleve su entrada al cuadrado.

para cuadrado :x
muestra :x * :x
fin

Al probarlo tendremos el siguiente resultado:

cuadrado 5
25

Pero no podemos hacer nada más con ello. No puede ser utilizado como un bloque para la definición de procedimientos más complejos. Por ejemplo, para calcular las suma del cuadrado de dos números. Para poder hacerlo será necesario poder comunicar el resultado a otro procedimiento. Cuadrado puede ser corregido simplemente reeemplazando muestra por reporta:

para cuadrado :x
reporta :x * :x
fin

Ahora cuadrado es un reportero:

cuadrado 5
No sé qué hacer con 25

Logo se queja porque no hay un mando al principio de la línea y no sabe qué hacer con su reporte.

Pruebe lo siguiente:

muestra cuadrado 5
25

Cuadrado pude ser utilizado como entrada de suma para calcular la suma del cuadrado de dos números:

muestra suma cuadrado 5 cuadrado 3
34

Podemos definir otro reportero aritmético, el promedio de dos números:

para promedio :x :y
reporta (:x + :y) / 2
fin

muestra promedio 20 50
35

Ahora podemos combinar los reporteros para calcular el cuadrado del promedio:

muestra cuadrado promedio 20 50
1225

Los procedimientos para palabras y listas que son reporteros son, en última instancia, los más útiles y, en muchos casos, pueden funcionar como herramientas. Las herramientas son procedimientos que tienen muchos propósitos diferentes. Un simple procedimiento herramienta puede duplicar una palabra, uniéndola a sí misma:

para doble :pal
reporta palabra :pal :pal
fin

muestra doble "¡ay!
¡ay!¡ay!

Ahora puede usar este reportero como entrada para otro procedimiento; por ejemplo,triángulo, definido en Palabras.

triángulo doble "¡ay!
¡ay!¡ay!
ay!¡ay!
y!¡ay!
!¡ay!
¡ay!
ay!
y!
!