Курс Raku / Розширені / Порядок виконання / Префікси інструкцій 🆕 / Вправи / Примусова жадібна обробка

Розв’язання: Примусова жадібна обробка

Ось один із можливих варіантів розв’язання задачі.

Код

say (1 .. Inf).is-lazy;
say (eager 1..3).is-lazy;
say (lazy 1..3).is-lazy;

🦋 Вихідний код можна знайти у файлі force-eager.raku.

Вивід

True
False
True

Коментарі

  1. Діапазон до Inf неможливо обчислити весь одразу, тож він лінивий: .is-lazy повідомляє True.

  2. Префікс eager змушує список бути виробленим негайно, тож результат уже не лінивий — .is-lazy повідомляє False. Це прямий відповідник позначення списку як lazy.

  3. Не застосовуйте eager до необмеженого діапазону: eager 1 .. Inf намагається обчислити кожен елемент одразу, тож програма просто зависає, споживаючи дедалі більше пам’яті, доки її не вб’ють. eager безпечний лише для списків, про які ви точно знаєте, що вони скінченні.

  4. Зворотне теж працює: lazy 1..3 позначає лінивим навіть короткий скінченний діапазон, тож .is-lazy повідомляє True. Префікс встановлює прапорець лінивості незалежно від того, наскільки малий список, — щоб бути лінивим, йому не обов’язково бути нескінченним.

Навігація курсом

Примусова жадібна обробка   |   Заглушити попередження