Escribir hacia arriba y hacia abajo

El procedimiento escribe.abajo simplemente escribe el primer elemento de su entrada hasta que la entrada está vacía:

para escribe.abajo :entrada
si vacía? :entrada [alto]
escribe primero :entrada
escribe.abajo menosprimero :entrada
fin

escribe.abajo "maravilloso
m
a
r
a
v
i
l
l
o
s
o

Hagamos un pequeño cambio para experimentar con la recursión simple de la que hablamos en Repetición y Recursión. Agregue otra instrucción escribe después de la línea recursiva.

para escribe.abajo :entrada
si vacía? :entrada [alto]
escribe primero :entrada
escribe.abajo menosprimero :entrada
escribe primero :entrada
fin

escribe.abajo "ropa
r
o
p
a
a
p
o
r

Observe el modelo siguiente para analizar cómo las entradas van pasando para producir el efecto de escribir hacia abajo y luego volver para atrás:

escribe.abajo "ropa comienza. Su entrada es "ropa
si vacía? "ropa [alto]
¿Está ropa vacía? Falso
escribe primero "ropa
- - r
escribe.abajo menosprimero "ropa
       
  escribe.abajo "opa comienza. Su entrada es "opa
si vacía? "opa [alto]
¿Está "opa vacía? Falso
escribe primero "opa
- - o
escribe.abajo menosprimero "opa
     
    escribe.abajo "pa comienza. Su entrada es "pa
si vacía? "pa [alto]
¿Está "pa vacía? Falso
escribe primero "pa
- - p
escribe.abajo menosprimero "pa
   
      escribe.abajo "a comienza. Su entrada es "a
si vacía? "a [alto]
¿Está "a vacía? Falso
escribe primero "a
- - a
escribe.abajo menosprimero "a
 
        escribe.abajo " comienza. Su entrada es "
si vacía? " [alto]
¿Está " vacía? Cierto
escribe.abajo " se detiene.
      escribe primero "a
- - a
escribe.abajo "a se detiene.
 
    escribe primero "pa
- - p
escribe.abajo "pa se detiene.
   
  escribe primero "opa
- - o
escribe.abajo "opa se detiene.
     
escribe primero "ropa
- - r
escribe.abajo "ropa se detiene.
       

 

Cada llamada recursiva sólo se detiene si todas sus líneas han sido ejecutadas. Esto produce el efecto deseado.