Курс по Raku / Функционално, паралелно, реактивно и уеб програмиране / Функционално програмиране / Мързеливи и безкрайни редици

Безкрайни редици

Заменете крайната стойност с * и последователността става безкрайна — тя няма последен елемент. Понеже списъкът е мързелив, това е напълно безопасно: нищо не се изчислява, докато не го вземете.

say (1, 2, 4 ... *).head(5); # (1 2 4 8 16)

Редицата от степени на двойката продължава вечно, но .head(5) изтегля само първите пет. Диапазонът 1..* е най-простата безкрайна последователност — всички цели числа от единица:

say (1..*).head(3);          # (1 2 3)
say (1..*).map(* ** 2).head(4); # (1 4 9 16)

Можете дори да дефинирате последователност чрез собствените ѝ по-ранни елементи. Редицата на Фибоначи, в която всяко число е сумата на предишните две, прочуто се събира в един ред:

my @fib = 1, 1, * + * ... *;
say @fib[^10]; # (1 1 2 3 5 8 13 21 34 55)

Затварянето * + * взема двата предишни елемента и ги събира. Съхраняването на последователността в @fib тук е наред, защото операторът ... я отбелязва като мързелива, така че масивът не се опитва да я изчисли цялата — произвеждат се само десетте елемента, поискани от @fib[^10].

Правило на палеца: безкрайната последователност е безопасна, стига да теглите от нея само краен отрязък.

Практика

Направете 1 тест върху съдържанието на тази тема.

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

Тест — Операторът за редица   |   Тест — Мързеливи редици


💪 Или преминете направо към упражненията в този раздел.