Raku kurss / Padziļināti / Operatori / Metaoperatori

Reducēšanas metaoperatori

Redukcijas metaoperators tiek rakstīts kā parasts operators, ievietots kvadrātiekavās, piemēram, [+] vai [*]. Tas paņem vērtību sarakstu un ievieto operatoru starp katru vērtību pāri, reducējot visu sarakstu līdz vienai vērtībai.

Piemēram, [+] saskaita visus saraksta elementus:

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

Konstrukcija [+] @data ir ekvivalenta operatora pierakstam pilnā formā:

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

Jebkurš piemērots infiksa operators darbojas tāpat. Ar [*] jūs iegūstat saraksta reizinājumu, tāpēc, piemērojot to diapazonam 1..$n, var ērti aprēķināt faktoriālu:

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

Šeit diapazons 1..$n ģenerē skaitļus no 1 līdz 5, un [*] tos sareizina: 1 * 2 * 3 * 4 * 5, kas ir 5!.

Darbojas arī virkņu konkatenācija. Redukcija [~] savieno virkņu sarakstu vienā virknē:

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

Arī salīdzināšanas operatorus var reducēt. [<] pārbauda, vai vērtības ir stingri augošā secībā:

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

Trīsstūra redukcija

Ja iekavās ieliek atpakaļsvītru, iegūst trīsstūra redukciju, kas saglabā visus starprezultātus, nevis tikai gala rezultātu:

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

Katrs rezultāta elements ir daļēja summa: 1, tad 1+2, tad 1+2+3 un tā tālāk līdz visa saraksta summai.

Prakse

Jūs gaida 1 viktorīna par šī temata saturu.

Kursa navigācija

Metaoperatori   |   Viktorīna — Reducēšana


💪 Vai arī dodieties tieši uz šīs sadaļas vingrinājumiem.