Я прокладываю себе путь через Типы и языки программирования, а Пирс - для стратегии снижения стоимости вызова, дает пример term id (id (λz. id z))
. Внутреннее redex id (λz. id z)
сначала сводится к λz. id z
, давая id (λz. id z)
в результате первой редукции до того, как внешнее redex приводится к нормальной форме λz. id z
.
Но вызов по порядку значений определяется как "только внешние удаленные редексы уменьшены", а "redex уменьшается только тогда, когда его правая сторона уже сведена к значению". В примере id (λz. id z)
появляется в правой части внешнего redex и уменьшается. Как это связано с правилом, которое уменьшает только самые внешние редексы?
Является ли ответ, что "внешний" и "самый внутренний" относится только к лямбда-абстракциям? Итак, для термина t
в λz. t
, t
не может быть уменьшено, но в redex s t
, t
сводится к значению v
, если это возможно, а затем s v
сокращается?