Kurso de Raku / Funkcia, samtempa, reaktiva kaj reta programado / Funkcia programado / Maldiligentaj kaj senfinaj sekvencoj
Senfinaj sekvencoj
Anstataŭigu la finan valoron per * kaj la sekvenco
fariĝas senfina — ĝi havas neniun lastan elementon. Ĉar
la listo estas maldiligenta, tio estas tute sekura: nenio estas
kalkulata antaŭ ol vi prenas ĝin.
say (1, 2, 4 ... *).head(5); # (1 2 4 8 16)La serio de potencoj de du daŭras eterne, sed .head(5)
tiras nur la unuajn kvin. La intervalo 1..* estas la plej
simpla senfina sekvenco — ĉiuj entjeroj ekde unu:
say (1..*).head(3); # (1 2 3)
say (1..*).map(* ** 2).head(4); # (1 4 9 16)Vi povas eĉ difini sekvencon per ĝiaj propraj pli fruaj elementoj. La sekvenco de Fibonacci, kie ĉiu nombro estas la sumo de la antaŭaj du, estas fame unulinia:
my @fib = 1, 1, * + * ... *;
say @fib[^10]; # (1 1 2 3 5 8 13 21 34 55)La fermaĵo * + * prenas la du antaŭajn elementojn kaj
adicias ilin. Konservi la sekvencon en @fib estas en ordo
ĉi tie, ĉar la operatoro ... markas ĝin kiel maldiligentan,
do la tabelo ne provas kalkuli ĝin tutan — nur la dek elementoj petitaj
per @fib[^10] estas iam produktataj.
La ĝenerala regulo: senfina sekvenco estas sekura tiom longe, kiom vi ĉiam tiras el ĝi nur finian tranĉaĵon.
Praktiko
Vin atendas 1 kvizo pri la enhavo de ĉi tiu temo.
Kursa navigado
← Kvizo — La sekvenca operatoro | Kvizo — Maldiligentaj sekvencoj →
💪 Aŭ iru rekte al la
ekzercoj de ĉi tiu sekcio.