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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.