Corso di Raku / Programmazione funzionale, concorrente, reattiva e web / Programmazione concorrente / hyper e race 🆕 / Exercises / Una somma con race

Soluzione: Una somma con race

Ecco una possibile soluzione del compito.

Codice

say (1..50).race.map(* ** 2).grep(* %% 2).sum;

🦋 Trova il programma nel file parallel-sum.raku.

Output

22100

Commenti

  1. .race esegue tutta la catena — elevare al quadrato ogni numero e filtrare i quadrati pari — in parallelo e, a differenza di .hyper, non promette di restituire gli elementi in ordine.

  2. Qui va bene perché il passo finale è una somma, che è indipendente dall’ordine: i quadrati pari (, , …, 50²) fanno 22100 a prescindere dall’ordine in cui arrivano. Quando ti limiti a combinare i risultati (somma, conteggio), .race è la scelta naturale e può portare un po’ meno sovraccarico di .hyper.

Una somma con race   |   hyper con un filtro