2011-01-25 3 views
5

У меня проблемы с пониманием приоритетов операторов исчисления лямбда.Приоритет операторов Lambda Calculus

Например, следующий код:

lambda x.x z lambda y.x y 

будет:

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

или

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

?

Еще более сложные примеры:

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

где в приведенном выше примере скобки идут?

Я знаю, что приложение лямбда остается ассоциативным, но значения лямбда имеют более высокий приоритет по сравнению с приложениями?

ответ

13

Приложение имеет более высокий приоритет, чем абстракция. Вместе с тем, что приложение левоассоциативное и абстракция правоассоциативная, это приводит к следующему:

lambda x.x z lambda y.x y 

является

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

и

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

является

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

Спасибо :) Это было просто af все! – Tharasim

Смежные вопросы