Комбинирование вызовов по необходимости (лень) и вызовов по значению (строгость) в одной языковой реализации, безусловно, возможно, при условии, что вы избегаете выполнения вычислений с побочными эффектами ленивыми и строгих расходящихся вычислений.
Анализ строгости используется на ленивых (CBN) функциональных языках для определения того, когда функции можно безопасно оценить с помощью стратегии CBV.Оценка CBV обычно выполняется быстрее, но использование этой стратегии оценки для нестрогих функций меняет семантику программы.
Wadler описывает, как комбинировать ленивые и строгие вычисления на функциональном языке.
лямбда-нить thread также решает проблему.
Scala имеет ключевое слово lazy
для указания того, что определенные вычисления должны быть выполненылениво.Другие языки имеют аналогичные конструкции.