Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Функциональное программирование / Свёртка / Процедура reduce

Тест — Свёртка

Что выведет следующая программа?

say (10, 1, 2, 3).reduce(* - *);
14
08
016
0-4

reduce сворачивает список слева направо, и первый аргумент блока — это всегда накопленный результат, здесь левый операнд -. Поэтому вычисляется ((10 - 1) - 2) - 3, то есть 9 - 2 - 3 = 4. Свёртка в другую сторону, 10 - (1 - (2 - 3)), дала бы 8, а сложение вместо вычитания дало бы 16. В отличие от +, вычитание зависит от порядка, поэтому роли двух аргументов действительно важны.

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

Процедура reduce   |   Сумма списка