CASCADAprueba_de_terminar
plantilla
valor_inicial
(CASCADAprueba_de_terminar
plantilla1
valor_inicial1
plantilla2
valor_inicial2
...
) (CASCADAprueba_de_terminar
plantilla1
valor_inicial1
plantilla2
valor_inicial2
...
plantilla_final
) CASCADEprueba_de_terminar
plantilla
valor_inicial
(CASCADEprueba_de_terminar
plantilla1
valor_inicial1
plantilla2
valor_inicial2
...
) (CASCADEprueba_de_terminar
plantilla1
valor_inicial1
plantilla2
valor_inicial2
...
plantilla_final
)
Devuelve el resultado de aplicar una plantilla (o varias plantillas, ve a la sección titulada Iteración de Plantilla) repetidamente, con el valor dado llenando la ranura por la primera aplicación y el resultado de cada aplicación llenando la ranura por la aplicación siguiente.
En el caso más sencillo, CASCADA toma tres argumentos.
El argumento plantilla
es una plantilla de una sola ranura.
Se evalúa esta plantilla algún número de veces (tal vez cero).
Por la primera evaluación, se llena la ranura con el argumento valor_inicial
; por las siguientes evaluaciones se llena la ranura con el resultado de la evaluación previa.
El argumento prueba_de_terminar
determina el número de evaluaciones.
Este argumento puede ser un número no negativo, en cuyo caso se evalúa la plantilla aquel número de veces.
También, prueba_de_terminar
puede ser un predicado, en cuyo caso se lo evalúa repetidamente (con el mismo argumento que se usa para plantilla
) y las evaluaciones de CASCADA continúa mientras que prueba_de_terminar
se evalúa a FALSO.
(En otras palabras, la plantilla prueba_de_terminar
indica la condición de terminar).
Si se evalúa la plantilla cero veces, CASCADA devuelve valor_inicial
.
Si se evalúa la plantilla al menos una vez, CASCADA devuelve el valor producido por la última evaluación.
Las plantillas de CASCADA puede incluir el símbolo #
para representar el número de veces que la plantilla ha sido evaluada.
Se llena esta ranura con 1 por la primera evaluación, 2 por la segunda y así sucesivamente.
MUESTRA CASCADA 5 [PONULTIMO # ?] []
[1 2 3 4 5]PARA VOCAL? :arg DEVUELVE MIEMBRO? :arg "aáeéiíoóuúü FIN MUESTRA CASCADA [VOCAL? PRIMERO ?] [MENOSPRIMERO ?] "plantilla
antillaMUESTRA CASCADA 5 [# * ?] 1
120
Puedes proporcionarle a CASCADA pares adicionales de los argumentos plantilla
y valor_inicial
para calcular varios resultados en paralelo.
En este caso, todas las plantillas (incluido la plantilla prueba_de_terminar
si la usas) son de múltiples ranuras, con el número de ranuras siendo igual al número de pares plantilla
/valor_inicial
dados.
En cada ronda de evaluación, ?2
representa el resultado de la evaluación de la segunda plantilla en la ronda previa.
Si el número total de argumentos (incluido el argumento prueba_de_terminar
) es impar, entonces CASCADA devuelve el valor final de la primera plantilla.
Si el número total de argumentos es par, entonces se toma el argumento final como una plantilla que se evalúa exactamente una vez, después de que se satisface la condición de terminar, para determina lo que CASCADA devuelve.
PARA FIBONACCI :n
DEVUELVE (CASCADA :n [?1 + ?2] 1 [?1] 0)
FIN
PARA PIGLATIN :palabra
DEVUELVE (CASCADA [VOCAL? PRIMERO ?]
[PALABRA MENOSPRIMERO ? PRIMERO ?]
:palabra
[PALABRA ? "ay])
FIN