Raku-Kurs / Fortgeschritten / Mehr über eingebaute Typen / Sequenzen
Lazy und unendliche Sequenzen
Eine Sequenz muss nicht alle ihre Werte auf einmal berechnen. Raku-Sequenzen sind lazy: Jeder Wert wird erst erzeugt, wenn er tatsächlich benötigt wird. Das macht es möglich, eine Sequenz zu beschreiben, die überhaupt kein Ende hat.
Um eine unendliche Sequenz zu schreiben, verwende Inf
als Endpunkt. Setze die Sequenz in Klammern, weil ...
schwächer bindet als =:
my $naturals = (1 ... Inf);Ohne die Klammern würde my $naturals = 1 ... Inf nur
1 der Variablen zuweisen und dann die Sequenz eigenständig
aufbauen — und das Auswerten einer endlosen Sequenz ohne Ergebnis würde
das Programm zum Hängen bringen.
Es wird noch nichts berechnet. Die Sequenz gibt Werte erst heraus,
wenn du danach fragst. Die Methode head nimmt die ersten
paar:
say (1 ... Inf).head(5); # (1 2 3 4 5)Obwohl die Sequenz unendlich ist, werden nur die ersten fünf Zahlen generiert. Ohne Laziness würde ein Programm, das versucht, eine endlose Sequenz vollständig aufzubauen, niemals fertig werden.
Für eine endliche Sequenz nimmt die Methode tail
stattdessen Werte vom Ende:
say (1 ... 100).tail(3); # (98 99 100)Laziness ermöglicht es dir, die Beschreibung einer Sequenz von der Entscheidung zu trennen, wie viel davon du verwenden möchtest.
Kursnavigation
← Quiz — Der
...-Operator | Ungerade Zahlen
→
💪 Oder springen Sie direkt zu den Übungen dieses
Abschnitts.