Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Функционално програмиране / Свиване / Процедурата reduce
Тест — Свиване
Какво отпечатва следната програма?
say (10, 1, 2, 3).reduce(* - *);| 1 | 4 |
| 0 | 8 |
| 0 | 16 |
| 0 | -4 |
reduce свива списъка отляво надясно, а
първият аргумент на блока винаги е резултатът дотук —
тук левият операнд на -. Затова се изчислява
((10 - 1) - 2) - 3, тоест 9 - 2 - 3 = 4.
Свиване в другата посока — 10 - (1 - (2 - 3)) — би дало
8, а събиране вместо изваждане би дало 16. За
разлика от +, изваждането зависи от реда, така че ролите на
двата аргумента наистина имат значение.