CASCADA

Sinopsis
CASCADA prueba_de_terminar plantilla valor_inicial
(CASCADA prueba_de_terminar plantilla1 valor_inicial1 plantilla2 valor_inicial2 ...)
(CASCADA prueba_de_terminar plantilla1 valor_inicial1 plantilla2 valor_inicial2 ... plantilla_final)
CASCADE prueba_de_terminar plantilla valor_inicial
(CASCADE prueba_de_terminar plantilla1 valor_inicial1 plantilla2 valor_inicial2 ...)
(CASCADE prueba_de_terminar plantilla1 valor_inicial1 plantilla2 valor_inicial2 ... plantilla_final)
Descripción

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.

Ejemplo
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
antilla

MUESTRA 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

SourceForge.net Logo