Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fp_8.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
116.22 Кб
Скачать

Cpu time: 16 real time: 16 gc time: 0

#t

>(time (prime? 127691))

Cpu time: 0 real time: 0 gc time: 0

#t

8.7 Ленивые вычисления

Все, что мы рассмотрели в этом разделе относится к методологии программирования, называемой ленивые вычисления (англ. lazy)

Для сравнения посмотрим таблицу

Энергичные вычисления

Ленивые вычисления

Вызов по значению

Вызов по необходимости

Делай всё, что можешь

Не делай ничего, пока этого не потребуется

Вычислить аргумент, затем вызвать функцию

Аргументы передаются в не вычисленном виде

Использование задержек открывает нам новые возможности, но в то же время создаёт дополнительные сложности.

Нам приходится иметь дело с двумя структурами данных и двумя разновидностями процедур: процедурами для списков и процедурами для потоков параметры которых - отложенные выражения.

Разнообразия можно бы избежать, если бы все процедуры смогли принимать отложенные аргументы. Тем самым, полностью изменить стратегию вычислений и преобразовать наш язык программирования, в "ленивый" язык с нормальным порядком редукции.

Это обеспечило бы однородный и изящный способ упростить использование отложенных вычислений.

Почему же это не сделать с самого начала?

Кроме упоминавшихся уже соображений эффективности, есть ещё одна важная проблема.

Ленивые вычисления вступают в конфликт с императивным стилем программирования.

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

На этом мы заканчиваем знакомство с функциональным программированием.

Page 11 of 11

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]