Курс языка программирования 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]Комментарии
Блок хранит нарастающую сумму
$sumв переменной за пределамиmap. Каждый вызов прибавляет текущий элемент и возвращает новую сумму, поэтому отображённый список и есть последовательность частичных сумм.В Raku это есть из коробки. Треугольная свёртка
[\+]сохраняет все частичные суммы, так что всё решение умещается в одно выражение:my @numbers = 2, 4, 6, 8; say [\+] @numbers; # (2 6 12 20)
Она возвращает
Seq, поэтому его краткое представление использует круглые скобки —(2 6 12 20)— вместо массивных[2 6 12 20], но числа те же самые.