Курс по Raku / Напреднали / Повече за вградените типове / Последователности

Мързеливи и безкрайни последователности

Една последователност не е задължена да изчислява всичките си стойности наведнъж. Последователностите в Raku са мързеливи: всяка стойност се произвежда само когато наистина е необходима. Това прави възможно описването на последователност, която изобщо няма край.

За да напишете безкрайна последователност, използвайте Inf като крайна точка. Оградете последователността в скоби, защото ... свързва по-слабо от =:

my $naturals = (1 ... Inf);

Без скобите my $naturals = 1 ... Inf ще присвои само 1 на променливата и след това ще създаде последователността самостоятелно — а изчисляването на безкрайна последователност без резултат ще блокира програмата.

Нищо не е изчислено все още. Последователността ще предоставя стойности само когато ги поискате. Методът head взема първите няколко:

say (1 ... Inf).head(5); # (1 2 3 4 5)

Въпреки че последователността е безкрайна, се генерират само първите пет числа. Без мързеливост програма, която се опитва да изгради цялата безкрайна последователност, никога не би завършила.

За крайна последователност методът tail взема стойности от края:

say (1 ... 100).tail(3); # (98 99 100)

Мързеливостта е това, което ви позволява да отделите описанието на последователността от решението колко от нея да използвате.

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

Тест — Операторът ...   |   Нечетни числа


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