Курс по Raku / Напреднали / Управление на потока / Префикси на инструкции 🆕 / Exercises / Принудете нетърпеливо изчисление
Решение: Принудете нетърпеливо изчисление
Ето едно възможно решение на задачата.
Код
say (1 .. Inf).is-lazy;
say (eager 1..3).is-lazy;
say (lazy 1..3).is-lazy;🦋 Изходният код на тази програма можете да намерите във файла force-eager.raku.
Изход
True
False
TrueКоментари
Диапазон до
Infне може да бъде изчислен наведнъж, затова е мързелив:.is-lazyвръщаTrue.Префиксът
eagerпринуждава списъка да бъде произведен веднага, така че резултатът вече не е мързелив —.is-lazyвръщаFalse. Това е прекият аналог на маркирането на списък сlazy.Не прилагайте
eagerкъм неограничен диапазон:eager 1 .. Infсе опитва да изчисли всеки елемент наведнъж, така че програмата просто увисва, консумирайки все повече памет, докато не бъде убита.eagerе безопасен само за списъци, за които знаете, че са крайни.Обратното също работи:
lazy 1..3маркира дори кратък, краен диапазон като мързелив, така че.is-lazyвръщаTrue. Префиксът задава флага за мързеливост независимо от това колко малък е списъкът — не е нужно да е безкраен, за да бъде мързелив.
Навигация в курса
← Принудете нетърпеливо изчисление | Заглушете предупреждение →