LINUX.ORG.RU

[help!] Читая Харрисона


0

0

Читаю вот я лекции по ML некоего Харрисона (не Джорджа).

Никак не могу все это дело понять. Не идет и все.

Собственно затык с этим примером

> twice = \lambda f x. f(f(x)) > > Каков интуитивный смысл twice? Примедите нормальную форму > > twice twice twice f x

Интуитивный смысл, это вроде как двойное применение f к x. А вот с тройным twice не могу понять.

Вобщем какую-то конструкцию я не секу и все.

anonymous

Оформление.

> twice = \lambda f x. f(f(x))
>
> Каков интуитивный смысл twice? Примедите нормальную форму
>
> twice twice twice f x

anonymous
()

> Интуитивный смысл, это вроде как двойное применение f к x.

Возможно я и ошибаюсь, но тут похоже на то, что:

1. Вначале к x применяется f 2. Далее к результату этого применения снова применяется f

... а не так, как вы сказали...

anonymous
()

Интуитивный смысл - композиция f с собой же.

Miguel ★★★★★
()

Чтобы понять интуитивный смысл надо тупо ручками выполнить редукцию лямбда терма. В условии же наприсано, привести нормальную форму.

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

Для начала скобки в twice twice twice f x правильно рассатвить нужно.

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

> 1. Вначале к x применяется f 2. Далее к результату этого применения снова применяется f

Угу. Именно это я и имел ввиду.

> Чтобы понять интуитивный смысл надо тупо ручками выполнить редукцию лямбда терма. В условии же наприсано, привести нормальную форму.

С этим то и был затык. Сейчас я глянул ещё раз и понял, что параметры-то, надо подставлять начиная слева. То есть

twice twice twice f x

превращается в

twice(twice(twice f x))

А я хотел сразу f и x подставлять.

Вот сейчас правильно преобразовал?

twice(twice(f(f(x))))

twice(f(f(x))(f(f(x))(x)))

f(f(x))(f(f(x))(x))(f(f(x))(f(f(x))(x))(x))

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

> twice(twice(f(f(x))))

> twice(f(f(x))(f(f(x))(x)))

> f(f(x))(f(f(x))(x))(f(f(x))(f(f(x))(x))(x))

Я всегда знал, что лисп ужасен... :)

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

>twice twice twice f x

>превращается в

>twice(twice(twice f x))

Нет. Скобки расставляются в обратную сторону:

((((twice) twice) twice) f) x

Правильный ответ

f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(x))))))))))))))))

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

PS Хотя конечно эту главу про математику мен ещё читать и читать...

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