Курс по 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 тест върху съдържанието на тази тема.
Навигация в курса
← Тест — Операторът за редица | Тест — Мързеливи редици →
💪 Или преминете направо към упражненията в този
раздел.