Raku-Kurs / Funktionale, nebenläufige, reaktive und Web-Programmierung / Funktionale Programmierung / Reduktion / Die Routine reduce
Quiz — Reduktion
Was gibt das folgende Programm aus?
say (10, 1, 2, 3).reduce(* - *);| 1 | 4 |
| 0 | 8 |
| 0 | 16 |
| 0 | -4 |
reduce faltet die Liste von links nach rechts, und das
erste Argument des Blocks ist stets das bisherige
Ergebnis — hier der linke Operand von -. Es berechnet also
((10 - 1) - 2) - 3, also 9 - 2 - 3 = 4.
Andersherum gefaltet, 10 - (1 - (2 - 3)), ergäbe
8, und Addieren statt Abziehen ergäbe 16.
Anders als + hängt das Abziehen von der Reihenfolge ab, die
Rollen der beiden Argumente sind also wirklich wichtig.