Как уменьшить лямбда-выражение - PullRequest
0 голосов
/ 17 декабря 2018

Я читаю книгу "Хаскель из первых принципов".На странице 12 мы учимся сокращать лямбда-выражения.

enter image description here

Я не понимаю, почему символ точки между λz и (λm.λn.m) исчез в шаге 3. Когда на шаге 3 я заменил x на (λm.λn.m), я подумал, что следует заменить только x, а не точку перед ним.Поэтому я бы ожидал (λy.λz. (λm.λn.m) z (yz)) (λp.p) вместо (λy.λz (λm.λn.m) z (yz)) (λp.p)

Вот мой анализ


  1. (λxyz.xz (yz)) (λm.λn.m) (λp.p)

    Сделайте карри явным.

  2. (λx.λy.λz.xz (yz)) (λm.λn.m) (λp.p)

    Замените x =(λm.λn.m)

  3. (λy.λz. (λm.λn.m) z (yz)) (λp.p)

    Заменить y =(λp.p)

  4. (λz. (λm.λn.m) z ((λp.p) z))

    Теперь заметим, что λz не имеетаргументы.Таким образом, остается только уменьшить (λm.λn.m) z ((λp.p) z)

  5. (λm.λn.m) z ((λp.p) z)

    Заменить m = z

  6. (λn.z) ((λp.p) z)

    Здесь мы имеем λn.z (что-то),Но λn.z всего - это просто z.(Так как тело λn.z - это просто z, которое не содержит n)

  7. z

    Вспоминая λz перед шагом 4, мы получаем

  8. λz.z

    Таким образом, мы получаем тот же ответ, что и в книге.

1 Ответ

0 голосов
/ 17 декабря 2018

Это определенно, безусловно, опечатка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...