2011-01-25 25 views
5

Lambda calculus operatörleri önceliğini anlamada sorun yaşıyorum. ÖrneğinLambda Calculus operatörleri önceliği

Aşağıdaki kod:

lambda x.x z lambda y.x y 

olacak:

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

veya

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

?

Hatta daha karmaşık örnekler:

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

nereye parantez gitmek yukarıdaki örnekte?

Lambda uygulamasının ilişkisel olduğunu ancak lambda değerlerinin uygulamalara göre daha yüksek önceliğe sahip olduğunu biliyorum.

cevap

13

Uygulama, soyutlamadan daha yüksek önceliğe sahiptir. Birlikte uygulama ilişkisel bırakılır ve soyutlama sağ ilişkisel olduğu gerçeği ile, bu şu yol açar:

lambda x.x z lambda y.x y 

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

ve

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

olduğu

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

Teşekkür ederim :) Çok basitti hepsi ter! – Tharasim