Курс по Raku / Напреднали / Управление на потока / gather и take / Exercises / Квадрати

Решение: Квадрати

Ето едно възможно решение на задачата.

Код

my @squares = gather for 1..6 {
    take $_ ** 2 if $_ %% 2;
};

say @squares;

🦋 Можете да намерите изходния код във файла squares.raku.

Изход

[4 16 36]

Коментари

  1. Условието if $_ %% 2 решава дали да вземем, а $_ ** 2 решава какво да вземем. Само четните числа 2, 4, 6 преминават условието.

  2. Техните квадрати 4, 16, 36 са единствените стойности, подадени на take, така че gather събира точно тях. Филтрирането и трансформирането заедно в едно take е нещо, което обикновен map не може да изрази толкова чисто.

Навигация в курса

Квадрати   |   Gather до запълване