Perl6: Operatoren I
Perl6 bietet eine Fülle neuer Operatoren, die einen auf den ersten Blick erschlagen. Daher hier nur ein paar besonders nette.
Der Zip-Operator verschachtelt listen:
(1 .. 4) Y <a b c d> # liefert ((1, "a"), (2, "b"), (3, "c"), (4, "d"))
Die Spitzen Klammern sind die neue Schreibweise für qw(), also für eine Liste von Worten, mit Leerzeichen getrennt.
Natürlich kann man den Zip-Operator auch mehrfach anwenden:
(1 .. 4) Y <a b c d> Y <a B C D>; # gibt ((1, "a", "A"), (2, "b", "B"), (3, "c", "C"), (4, "d", "D"))
Wer öfter mit Listen von Zahlen rumhantieren muss, wird sich über die “reduzierenden” Operatoren in Eckigen Klammern freuen, [+] zum Beispiel:
[+] (1, 2, 4); # gibt 1+2+4 = 7
Das funktioniert mit beliebigen numerischen Operatoren, z.B. die Fakultät lässt sich schon schreiben:
[*] (1 .. 10); # wird zu 1 * 2 * .. * 10 = 3628800
Der “Hyperoperator” verknüpft Arrays mit Arrays:
(1 .. 4) >>+<< (2 .. 5); # gibt (1+2, 2+3, 3+4, 4+5) = (3, 5, 7, 9) (2, 3) >>**<< (2, 3); #gibt (2**2, 3**3) = (4, 27)
Hier ist ** der Potenzoperator, und der Hyperoperatore >>…<< sorgt dafür, dass er elementweise auf die Arrays angewandt wird.
Fehlende Elemente werden durch sinnvolle Defaults ersetzt, also 0 bei Addition und 1 bei Multiplikation:
(1, 2, 3) >>+<<(1, 2); # gibt (2, 4, 3) (1, 2, 3) >>*<<(1, 2); # gibt (1, 4, 3)
Wenn eines der Array aber nur ein Element hat, wird dieses auf das gesamte andere Array angewandt:
(1, 2, 3) >>*<< 2; # gibt (2, 4, 6), jedes Element verdoppelt
[tags]perl, perl6, operator, programmieren[/tags]
