Функциональное программирование — различия между версиями
Alex z (обсуждение | вклад) (→Кр1) |
Shersh (обсуждение | вклад) м (→Убрать все сокращения и расставить все скобки) |
||
Строка 2: | Строка 2: | ||
==Убрать все сокращения и расставить все скобки== | ==Убрать все сокращения и расставить все скобки== | ||
(λ a b . (λ c d e . e) a) (x y) y (λ f . x) y | (λ a b . (λ c d e . e) a) (x y) y (λ f . x) y | ||
+ | |||
+ | === Решение === | ||
+ | Скобки ставятся по следующим правилам: | ||
+ | * тело абстракции заключается в скобки: λ x . M <tex> \Rightarrow </tex> λ x . (M) | ||
+ | * аппликация левоассоциативна: a b c d <tex> \Rightarrow </tex> ((a b) c) d | ||
+ | * сокращения раскрываются во вложенные лямбды (сразу с расставлением скобок): λ a b c . M <tex> \Rightarrow </tex> λ a . (λ b . (λ c . (M))) | ||
+ | Важно: тело абстракции забирает всё до конца то скобки, в которую заключено | ||
+ | |||
+ | Итого: ((((λ a . (λ b . ((λ c . (λ d . (λ e . (e)))) a))) (x y)) y) (λ f . (x))) y | ||
==Привести в нормальную форму== | ==Привести в нормальную форму== |
Версия 10:49, 26 апреля 2015
Содержание
Кр1
Убрать все сокращения и расставить все скобки
(λ a b . (λ c d e . e) a) (x y) y (λ f . x) y
Решение
Скобки ставятся по следующим правилам:
- тело абстракции заключается в скобки: λ x . M λ x . (M)
- аппликация левоассоциативна: a b c d ((a b) c) d
- сокращения раскрываются во вложенные лямбды (сразу с расставлением скобок): λ a b c . M λ a . (λ b . (λ c . (M)))
Важно: тело абстракции забирает всё до конца то скобки, в которую заключено
Итого: ((((λ a . (λ b . ((λ c . (λ d . (λ e . (e)))) a))) (x y)) y) (λ f . (x))) y
Привести в нормальную форму
λ a b . a (λ c . b c) a (λ d . d) a
λ a . (λ b . y) (λ c . y (y (λ d . a a a)) (x x) a)
Нормальный порядок редукции
(λ a . y (y (y (λ b . a))) y) (x (x (x (λ c d . d) y)) x)
Аппликативный порядок редукции
Выписать систему уравнений типизации
(λ a . a a) (λ b c . c)
Кодирование по Чёрчу
Выписать кайнды конструкторов типов, выписать типы конструкторов, закодировать по Чёрчу:
data Policeman a = Doctor a | Mice
data Tree a b c = Frog c | Pip (Tree a b c)