Estoy trabajando en Types and Programming Languages, y Pierce, para la estrategia de reducción de llamadas mediante la llamada, da el ejemplo del término id (id (λz. id z))
. El redex interno id (λz. id z)
se reduce primero a λz. id z
, dando id (λz. id z)
como resultado de la primera reducción, antes de que la redex exterior se reduzca a la forma normal λz. id z
.Llamar por valor en el cálculo lambda
Pero el orden de llamada por valor se define como 'solo se reducen las redex externas', y 'una redex se reduce solamente cuando su lado derecho ya se ha reducido a un valor'. En el ejemplo id (λz. id z)
aparece en el lado derecho de la redex exterior y se reduce. ¿Cómo se cuadra esto con la regla de que solo se reducen los redex más externos?
¿La respuesta de que 'más externo' y 'más interno' solo se refiere a abstracciones lambda? Entonces, para un término t
en λz. t
, t
no se puede reducir, pero en un redex s t
, t
se reduce a un valor v
si esto es posible, y luego se reduce s v
?
Un ejemplo incluso más simple es (λx.x) (x) porque el lado derecho no se puede evaluar más por lo que está atascado en la llamada por valor. – dominik