Cursus Raku / Functioneel, concurrent, reactief en webprogrammeren / Functioneel programmeren / Luie en oneindige reeksen
Oneindige reeksen
Vervang de eindwaarde door een * en de reeks wordt
oneindig — ze heeft geen laatste element. Omdat de
lijst lui is, is dat volkomen veilig: er wordt niets berekend tot je het
opneemt.
say (1, 2, 4 ... *).head(5); # (1 2 4 8 16)De reeks machten van twee gaat eeuwig door, maar
.head(5) haalt er alleen de eerste vijf uit. Het bereik
1..* is de eenvoudigste oneindige reeks — alle gehele
getallen vanaf één:
say (1..*).head(3); # (1 2 3)
say (1..*).map(* ** 2).head(4); # (1 4 9 16)Je kunt een reeks zelfs in termen van haar eigen eerdere elementen definiëren. De Fibonacci-reeks, waarin elk getal de som van de vorige twee is, is befaamd om zijn eenregelige vorm:
my @fib = 1, 1, * + * ... *;
say @fib[^10]; # (1 1 2 3 5 8 13 21 34 55)De closure * + * neemt de twee vorige elementen en telt
ze op. De reeks in @fib bewaren kan hier prima omdat de
operator ... haar als lui markeert, zodat de array niet
probeert haar helemaal te berekenen — alleen de tien elementen waar
@fib[^10] om vraagt worden ooit geproduceerd.
De vuistregel: een oneindige reeks is veilig zolang je er alleen een eindig stuk uit haalt.
Praktijk
Maak de 1 quiz over de inhoud van dit onderwerp.
Cursusnavigatie
← Quiz — De reeksoperator | Quiz — Luie reeksen →
💪 Of ga direct naar de
oefeningen in deze sectie.