Курс языка программирования 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. Префикс устанавливает флаг ленивости независимо от размера списка — он не обязан быть бесконечным, чтобы быть ленивым.
Навигация по курсу
← Принудительное немедленное вычисление | Подавление предупреждения →