Curso de Raku / Avanzado / Operadores / Metaoperadores
Metaoperadores de reducción
Un meta-operador de reducción se escribe como un operador regular
envuelto en corchetes, como [+] o [*]. Toma
una lista de valores e inserta el operador entre cada par de ellos,
reduciendo toda la lista a un único valor.
Por ejemplo, [+] suma todos los elementos de una
lista:
my @data = 3, 5, 7, 9, 11;
say [+] @data; # 35La construcción [+] @data es equivalente a escribir el
operador a mano:
say 3 + 5 + 7 + 9 + 11; # 35Cualquier operador infijo adecuado funciona de la misma manera. Con
[*] obtienes el producto de la lista, por lo que aplicarlo
al rango 1..$n es una forma práctica de calcular un
factorial:
my $n = 5;
say [*] 1..$n; # 120Aquí, el rango 1..$n produce los números del 1 al 5, y
[*] los multiplica: 1 * 2 * 3 * 4 * 5, que es
5!.
La concatenación de cadenas también funciona. La reducción
[~] une una lista de cadenas en una sola:
my @strings = <neun hundert fünf und zwanzig>;
say [~] @strings; # neunhundertfünfundzwanzigIncluso los operadores de comparación se pueden reducir.
[<] indica si los valores están en orden estrictamente
creciente:
say [<] 1, 2, 3; # TrueReducción triangular
Si colocas una barra invertida dentro de los corchetes, obtienes una reducción triangular, que conserva todos los resultados intermedios en lugar de solo el final:
say [\+] 1..5; # (1 3 6 10 15)Cada elemento del resultado es una suma parcial: 1,
luego 1+2, luego 1+2+3, y así sucesivamente
hasta la suma de toda la lista.
Práctica
Resuelve 1 cuestionario sobre el contenido de este tema.
Navegación del curso
← Metaoperadores | Quiz — Reducción →
💪 O ve directamente a los ejercicios de esta
sección.