Курс Raku / Розширені / Порядок виконання / Префікси інструкцій 🆕 / Вправи / Примусова жадібна обробка
Розв’язання: Примусова жадібна обробка
Ось один із можливих варіантів розв’язання задачі.
Код
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. Префікс встановлює прапорець лінивості незалежно від того, наскільки малий список, — щоб бути лінивим, йому не обов’язково бути нескінченним.