LINUX.ORG.RU
ФорумTalks

lambda


0

0

Посоветуйте какую-нибудь статейку где lambda calculus описан для кретинов. А то читая из тех источников что нашел забываю начало. Нарисованы крючки, вроде половину крючков в выражении распарсил, разбираю вторую половину и забываю о чем была первая.

Ответ на: комментарий от anonymous

СпасибО!

Нет продвинутые не нужны, нужно хотя бы понимание.

Например это (& пуст будет лямбой):

&xy . (x+y)

я могу понять, это функциональная абстракция в которой xy are bound для x+y ну и понятно что это делает. x+y ничего сложного.

А вот это?

&x . xy

Это как понять? То есть вместо (x+y) имеем xy, то есьт терм который является апликацией x к y'ку. Но как можно аплицировать переменную к переменной? Что в результате получится?

Вобщем минимального понимания нету.

dissident ★★
() автор топика
Ответ на: комментарий от dissident

На выражение в lambda исчисление надо смотреть как на выражение, а на вычисление как последовательное применение правил редукции.

Т.Е например выражение

x y z - это просто выражение из 3 термов, к которому нельзя применить ниодного правила редукции.

Пусть lambda будет белслещем,а вместо точки стрелка (как в haskell)

\x->y->x+y

тоже выражение, к которому нельзя применить ниодно правило редукции. И это еще выражение без свободных переменных (aka комбинатор)

а вот (\x->\y->x+y) 12 13 выражение, которое редуцируется в 25

а например (\x->\y->x+y) 12 13 15 редуцируется в 25 15

>&x . xy

Вродебы это парсится как (\x->x)y и является выражением, которое редуцируется к y

ival ★★
()
Ответ на: комментарий от ival

Вместо \x->y->x+y

\x->y->(x+y)

чтоб парсилось правильно

ival ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.