Cursus Raku / Addendum 🆕 / Werken met gegevens / Lijsten, arrays en hashes / Exercises / Lopende totalen

Oplossing: Lopende totalen

Hier is een mogelijke oplossing voor de taak.

Code

my @numbers = 2, 4, 6, 8;

my $sum = 0;
my @totals = @numbers.map({ $sum += $_ });

say @totals;

🦋 Je kunt de broncode vinden in het bestand running-totals.raku.

Uitvoer

[2 6 12 20]

Opmerkingen

  1. Het blok houdt een lopende $sum bij in een variabele buiten de map. Elke aanroep telt het huidige element erbij op en geeft de nieuwe som terug, dus is de gemapte lijst de reeks deelsommen.

  2. Raku heeft dit ingebouwd. De driehoeksreductie [\+] bewaart elke deelsom, dus is de hele oplossing één enkele uitdrukking:

    my @numbers = 2, 4, 6, 8;
    say [\+] @numbers; # (2 6 12 20)

    Ze geeft een Seq terug, dus haar gist gebruikt haakjes — (2 6 12 20) — in plaats van de [2 6 12 20] van de array, maar de getallen zijn dezelfde.

Cursusnavigatie

Lopende totalen   |   Transponeer een matrix