и другие стратегии вычислений. Рассмотрим
Однако существуют и другие стратегии вычислений. Рассмотрим более подробно возможные подходы к означиванию переменных.
При вычислении с вызовом по значению (call-by-value) все выражения должны быть означены до вычисления операции аппликации.
При вычислении с вызовом по имени (call-by-name) до вычисления операции аппликации необходима подстановка термов вместо всех вхождений формальных параметров перед означиванием. Именно эта стратегия лежит в основе "ленивых" (lazy), "отложенных" (delayed) или "замороженных" (frozen) вычислений, которые принципиально необходимы для обработки потенциально бесконечных структур данных.
Наконец, при вычислении с вызовом по необходимости (call-by-need) ранее вычисленные значения аргументов сохраняются в памяти компьютера только в том случае, если необходимо их повторное использование.
Чтобы устранить сложности с поддержкой категориальной абстрактной машиной "ленивых" вычислений, пересмотрим цикл работы КАМ, расширив пространство состояний дополнительными инструкциями для "замораживания" (freeze) и "размораживания" (unfreeze), которые представим в форме таблицы 12.3.
Таблица 12.3. Дополнительные инструкции КАМ для реализации "ленивых" вычисленийСтарое состояние КАМНовое состояние КАМ
ТермКодСтекТермКодСтек
s |
{freeze c}.C1 |
S |
C.s |
C1 |
S |
C.s |
unfreeze.C |
S |
s |
C |
S |
s |
unfreeze.C |
S |
s |
C |
S |
Содержание Назад