Cursus Raku / Geavanceerd / Meer over ingebouwde types / Reeksen

Luie en oneindige reeksen

Een reeks hoeft niet al zijn waarden in één keer te berekenen. Raku-reeksen zijn lui (lazy): elke waarde wordt pas geproduceerd wanneer deze daadwerkelijk nodig is. Hierdoor is het mogelijk om een reeks te beschrijven die helemaal geen einde heeft.

Om een oneindige reeks te schrijven, gebruik je Inf als eindpunt. Zet de reeks tussen haakjes, omdat ... minder sterk bindt dan =:

my $naturals = (1 ... Inf);

Zonder de haakjes zou my $naturals = 1 ... Inf alleen 1 aan de variabele toewijzen en vervolgens de reeks apart opbouwen — en het evalueren van een eindeloze reeks zonder resultaat zou het programma laten vastlopen.

Er wordt nog niets berekend. De reeks levert alleen waarden wanneer je erom vraagt. De methode head neemt de eerste paar:

say (1 ... Inf).head(5); # (1 2 3 4 5)

Hoewel de reeks oneindig is, worden alleen de eerste vijf getallen gegenereerd. Zonder luiheid zou een programma dat een eindeloze reeks probeert op te bouwen nooit klaar zijn.

Voor een eindige reeks neemt de methode tail juist waarden van het einde:

say (1 ... 100).tail(3); # (98 99 100)

Luiheid is wat je in staat stelt om de beschrijving van een reeks te scheiden van de beslissing hoeveel ervan je wilt gebruiken.

Cursusnavigatie

Quiz — De ...-operator   |   Oneven getallen


💪 Of ga direct naar de oefeningen in deze sectie.