Cursus Raku / Geavanceerd / Besturingsstructuren / Statement-prefixen / Exercises / Gretige evaluatie afdwingen
Oplossing: Gretige evaluatie afdwingen
Hier is een mogelijke oplossing voor de opgave.
Code
say (1 .. Inf).is-lazy;
say (eager 1..3).is-lazy;
say (lazy 1..3).is-lazy;🦋 Je kunt de broncode vinden in het bestand force-eager.raku.
Uitvoer
True
False
TrueOpmerkingen
Een range tot
Infkan niet in een keer worden berekend, dus deze is lazy:.is-lazygeeftTrue.Het prefix
eagerdwingt een lijst af om onmiddellijk te worden geproduceerd, dus het resultaat is niet langer lazy —.is-lazygeeftFalse. Dit is het directe tegenovergestelde van het markeren van een lijst alslazy.Pas
eagerniet toe op een onbegrensde range:eager 1 .. Infprobeert elk element in een keer te berekenen, waardoor het programma simpelweg vastloopt en steeds meer geheugen verbruikt totdat het wordt afgebroken.eageris alleen veilig op lijsten waarvan je weet dat ze eindig zijn.Het omgekeerde werkt ook:
lazy 1..3markeert zelfs een korte, eindige range als lazy, dus.is-lazygeeftTrue. Het prefix stelt de laziness-vlag in ongeacht hoe klein de lijst is — deze hoeft niet oneindig te zijn om lazy te zijn.
Cursusnavigatie
← Gretige evaluatie afdwingen | Een waarschuwing onderdrukken →