Cursus Raku / Functioneel, concurrent, reactief en webprogrammeren / Concurrent programmeren / hyper en race 🆕 / Exercises / Een som met race

Oplossing: Een som met race

Hier is een mogelijke oplossing voor de taak.

Code

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

🦋 Je kunt de broncode vinden in het bestand parallel-sum.raku.

Uitvoer

22100

Opmerkingen

  1. .race draait de hele keten — elk getal kwadrateren en op de even kwadraten filteren — parallel, en belooft, anders dan .hyper, niet de elementen op volgorde terug te geven.

  2. Dat is hier prima omdat de laatste stap een som is, die van volgorde onafhankelijk is: de even kwadraten (, , …, 50²) tellen op tot 22100, in welke volgorde ze ook aankomen. Wanneer je de resultaten alleen combineert (som, aantal), is .race de natuurlijke keuze en kan het iets minder overhead meebrengen dan .hyper.

Cursusnavigatie

Een som met race   |   hyper met een filter