Учебники

Функциональное программирование — Ленивая оценка

Ленивая оценка — это стратегия оценки, которая удерживает оценку выражения до тех пор, пока не потребуется его значение. Это позволяет избежать повторной оценки. Haskell — хороший пример такого функционального языка программирования, основы которого основаны на Lazy Evaluation.

Ленивая оценка используется в функциях карт Unix для повышения их производительности путем загрузки только необходимых страниц с диска. Для оставшихся страниц память не будет выделена.

Ленивая оценка — преимущества

  • Это позволяет языковой среде выполнения отбрасывать подвыражения, которые не связаны напрямую с конечным результатом выражения.

  • Это уменьшает временную сложность алгоритма, отбрасывая временные вычисления и условные выражения.

  • Это позволяет программисту получать доступ к компонентам структур данных вне их порядка после их инициализации, если они свободны от каких-либо циклических зависимостей.

  • Лучше всего подходит для загрузки данных, к которым редко обращаются.

Это позволяет языковой среде выполнения отбрасывать подвыражения, которые не связаны напрямую с конечным результатом выражения.

Это уменьшает временную сложность алгоритма, отбрасывая временные вычисления и условные выражения.

Это позволяет программисту получать доступ к компонентам структур данных вне их порядка после их инициализации, если они свободны от каких-либо циклических зависимостей.

Лучше всего подходит для загрузки данных, к которым редко обращаются.

Ленивая оценка — недостатки

  • Это заставляет языковую среду выполнения хранить оценку подвыражений до тех пор, пока она не потребуется в конечном результате, создавая thunks (объекты с задержкой).

  • Иногда это увеличивает пространственную сложность алгоритма.

  • Очень сложно найти его производительность, потому что он содержит множество выражений перед их выполнением.

Это заставляет языковую среду выполнения хранить оценку подвыражений до тех пор, пока она не потребуется в конечном результате, создавая thunks (объекты с задержкой).

Иногда это увеличивает пространственную сложность алгоритма.

Очень сложно найти его производительность, потому что он содержит множество выражений перед их выполнением.

Ленивая оценка с использованием Python

Метод диапазона в Python следует концепции Lazy Evaluation. Это экономит время выполнения для больших диапазонов, и нам никогда не требуются все значения за раз, поэтому также экономит потребление памяти. Посмотрите на следующий пример.

Live Demo

r = range(10) 
print(r) 
range(0, 10) 
print(r[3]) 

Это даст следующий результат —