Raku-Kurs / Fortgeschritten / Operatoren / Meta-Operatoren

Reduktions-Metaoperatoren

Ein Reduktions-Meta-Operator wird als regulärer Operator in eckigen Klammern geschrieben, wie z. B. [+] oder [*]. Er nimmt eine Liste von Werten und fügt den Operator zwischen jedes Paar ein, wodurch die gesamte Liste auf einen einzelnen Wert reduziert wird.

Zum Beispiel addiert [+] alle Elemente einer Liste:

my @data = 3, 5, 7, 9, 11;
say [+] @data; # 35

Das Konstrukt [+] @data entspricht dem manuellen Ausschreiben des Operators:

say 3 + 5 + 7 + 9 + 11; # 35

Jeder geeignete Infix-Operator funktioniert auf die gleiche Weise. Mit [*] erhalten Sie das Produkt der Liste, sodass die Anwendung auf den Bereich 1..$n eine praktische Methode ist, eine Fakultät zu berechnen:

my $n = 5;
say [*] 1..$n; # 120

Hier erzeugt der Bereich 1..$n die Zahlen von 1 bis 5, und [*] multipliziert sie: 1 * 2 * 3 * 4 * 5, das ist 5!.

Zeichenkettenverkettung funktioniert ebenfalls. Die [~]-Reduktion verbindet eine Liste von Zeichenketten zu einer einzigen:

my @strings = <neun hundert fünf und zwanzig>;
say [~] @strings; # neunhundertfünfundzwanzig

Sogar Vergleichsoperatoren können reduziert werden. [<] prüft, ob die Werte in streng aufsteigender Reihenfolge stehen:

say [<] 1, 2, 3; # True

Dreieckige Reduktion

Wenn Sie einen Backslash in die Klammern setzen, erhalten Sie eine dreieckige Reduktion, die alle Zwischenergebnisse behält, anstatt nur das endgültige:

say [\+] 1..5; # (1 3 6 10 15)

Jedes Element des Ergebnisses ist eine Teilsumme: 1, dann 1+2, dann 1+2+3, und so weiter bis zur Summe der gesamten Liste.

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Kursnavigation

Meta-Operatoren   |   Quiz — Reduktion


💪 Oder springen Sie direkt zu den Übungen dieses Abschnitts.