Приоритет на операторите на ламбда смятане

Имам проблеми с разбирането на приоритета на операторите на ламбда смятане.

Например следния код:

lambda x.x z lambda y.x y

ще бъде:

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

or

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

?

Още по-сложни примери:

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

къде в горния пример отиват скобите?

Знам, че ламбда приложението е ляво асоциативно, но дали ламбда стойностите имат по-висок приоритет пред приложенията?


person Tharasim    schedule 25.01.2011    source източник


Отговори (1)


Приложението има по-висок приоритет от абстракцията. Заедно с факта, че приложението е ляво-асоциативно, а абстракцията е дясно-асоциативно, това води до следното:

lambda x.x z lambda y.x y

is

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

и

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

is

(lambda x. (x z)) (lambda y. (w (lambda w. (((w x) y) z))))
person sepp2k    schedule 25.01.2011
comment
Благодаря :) Все пак беше просто! - person Tharasim; 25.01.2011