Курс языка программирования Raku / Приложение 🆕 / Работа с данными / Списки, массивы и хеши / Exercises / Нарастающие итоги

Решение: Нарастающие итоги

Вот один из возможных вариантов решения задачи.

Код

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

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

say @totals;

🦋 Исходный код можно найти в файле running-totals.raku.

Вывод

[2 6 12 20]

Комментарии

  1. Блок хранит нарастающую сумму $sum в переменной за пределами map. Каждый вызов прибавляет текущий элемент и возвращает новую сумму, поэтому отображённый список и есть последовательность частичных сумм.

  2. В Raku это есть из коробки. Треугольная свёртка [\+] сохраняет все частичные суммы, так что всё решение умещается в одно выражение:

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

    Она возвращает Seq, поэтому его краткое представление использует круглые скобки — (2 6 12 20) — вместо массивных [2 6 12 20], но числа те же самые.

Навигация по курсу

Нарастающие итоги   |   Транспонируйте матрицу