2011-01-25 20 views
5

Tengo problemas para entender los operadores de cálculo lambda con precedencia.Lambda Operadores de cálculo precedencia

Por ejemplo el siguiente código:

lambda x.x z lambda y.x y 

va a ser:

lambda x. (x (z lambda y. x y)) 

o

lambda x. ((x z) (lambda y. x y)) 

?

ejemplos aún más complicado:

(lambda x.x z) lambda y.w lambda w.w x y z 

donde en el ejemplo anterior los paréntesis van?

Sé que la aplicación lambda se deja asociativa, pero ¿tienen los valores lambda mayor prioridad sobre las aplicaciones?

Respuesta

13

La aplicación tiene mayor prioridad que la abstracción. Junto con el hecho de que la aplicación es asociativo por la izquierda y la abstracción es asociativo por la derecha, esto conduce a lo siguiente:

lambda x.x z lambda y.x y 

es

lambda x. ((x z) (lambda y. (x y))) 

y

(lambda x.x z) lambda y.w lambda w.w x y z 

se

(lambda x. (x z)) (lambda y. (w (lambda w. (((w x) y) z)))) 
+0

Gracias :) Fue simple af ter todo! – Tharasim