Meta: Un espiral crece y se achica con recursión interna.
to spiral :length :pitch
pd
if :length > howbig [stop]
setc whatcolor
setpensize howthick
fd :length rt angle
carefully [note :pitch 3] [ ]
spiral :length + howtight :pitch - 1
fd :length rt angle
carefully [note :pitch 3] [ ]
end
to reset
cg
end
Notas Este proyecto usa recursión interna, cuando la llamada recursiva no está en la última línea del procedimiento. Al principio la computadora no realiza los comandos que están después de la llamada recursiva, pero tampoco los ignora; lo que hace es guardar estos comandos para usarlos más luego. Cuando el procedimiento llega a detenerse en algún lugar (stop) - en este caso, cuando el valor de length es mayor que el número del control howbig - ya no se producen más llamadas recursivas... pero ahora, los comandos guardados que estában debajo de la llamada recursiva empiezan a realizarse, desde el más reciente al más antigüo.
Esto significa que, si repites el comando que tenías antes de la llamada recursiva después de esta, la espiral primero crecerá y luego se achicará. Las notas se harán graves y luego se harán agudas nuevamente.
¿Qué pasa si?
Experimenta con los controles para encontrar algunos diseños agradables.
Desafío
Como en Espirales 7, crea un procedimiento diferente (llámalo nueva_espiral si quieres), y coloca en este procedimiento los comandos que no cambian cuando el procedimiento spiral está siendo realizado (en este caso, los comandos setc y setpensize). Retira estos comandos del procedimiento spiral. Luego llama al procedimiento spiral desde el nuevo procedimiento.
|