Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación concurrente / hyper y race 🆕 / Exercises / Una suma con race

Solución: Una suma con race

Aquí tienes una posible solución para la tarea.

Código

say (1..50).race.map(* ** 2).grep(* %% 2).sum;

🦋 Puedes encontrar el código fuente en el archivo parallel-sum.raku.

Salida

22100

Comentarios

  1. .race ejecuta la cadena entera — elevar al cuadrado cada número y filtrar los cuadrados pares — en paralelo y, a diferencia de .hyper, no promete devolver los elementos en orden.

  2. Aquí eso no importa, porque el paso final es una suma, que no depende del orden: los cuadrados pares (, , …, 50²) suman 22100 sin importar en qué orden lleguen. Cuando solo combinas los resultados (suma, recuento), .race es la elección natural y puede acarrear algo menos de sobrecarga que .hyper.

Una suma con race   |   hyper con un filtro