Corso di Raku / Avanzato / Altro sui tipi predefiniti / Sequenze
Sequenze lazy e infinite
Una sequenza non deve calcolare tutti i suoi valori in una volta sola. Le sequenze in Raku sono lazy: ogni valore viene prodotto solo quando è effettivamente necessario. Questo rende possibile descrivere una sequenza che non ha alcuna fine.
Per scrivere una sequenza infinita, usa Inf come punto
finale. Racchiudi la sequenza tra parentesi, perché ... ha
una precedenza più bassa di =:
my $naturals = (1 ... Inf);Senza le parentesi, my $naturals = 1 ... Inf
assegnerebbe solo 1 alla variabile e poi costruirebbe la
sequenza per conto suo — e valutare una sequenza infinita senza
risultato bloccherebbe il programma.
Non viene calcolato ancora nulla. La sequenza fornirà i valori solo
quando li richiedi. Il metodo head prende i primi:
say (1 ... Inf).head(5); # (1 2 3 4 5)Anche se la sequenza è infinita, vengono generati solo i primi cinque numeri. Senza la valutazione lazy, un programma che tentasse di costruire tutta una sequenza infinita non finirebbe mai.
Per una sequenza finita, il metodo tail prende i valori
dalla fine:
say (1 ... 100).tail(3); # (98 99 100)La valutazione lazy è ciò che permette di separare la descrizione di una sequenza dalla decisione su quanta parte di essa utilizzare.
Navigazione del corso
← Quiz — L’operatore
... | Numeri dispari
→
💪 Oppure vai direttamente agli esercizi di questa
sezione.