Corso di Raku / Avanzato / Controllo di flusso / Prefissi di istruzione / Exercises / Forzare la valutazione eager
Soluzione: Forzare la valutazione eager
Ecco una possibile soluzione al compito.
Codice
say (1 .. Inf).is-lazy;
say (eager 1..3).is-lazy;
say (lazy 1..3).is-lazy;🦋 Il codice sorgente è disponibile nel file force-eager.raku.
Output
True
False
TrueCommenti
Un intervallo fino a
Infnon può essere calcolato tutto in una volta, quindi è lazy:.is-lazyrestituisceTrue.Il prefisso
eagerforza una lista a essere prodotta immediatamente, quindi il risultato non è più lazy —.is-lazyrestituisceFalse. Questo è il corrispettivo diretto di contrassegnare una lista comelazy.Non applicate
eagera un intervallo illimitato:eager 1 .. Infcerca di calcolare ogni elemento in una volta sola, quindi il programma semplicemente si blocca, consumando sempre più memoria fino a essere terminato.eagerè sicuro solo su liste che sapete essere finite.Anche l’inverso funziona:
lazy 1..3contrassegna anche un intervallo corto e finito come lazy, quindi.is-lazyrestituisceTrue. Il prefisso imposta il flag di pigrizia indipendentemente da quanto piccola sia la lista — non deve essere infinita per essere lazy.