Функциональное программирование — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Кр1)
м (Убрать все сокращения и расставить все скобки)
Строка 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 [math] \Rightarrow [/math] λ x . (M)
  • аппликация левоассоциативна: a b c d [math] \Rightarrow [/math] ((a b) c) d
  • сокращения раскрываются во вложенные лямбды (сразу с расставлением скобок): λ a b c . M [math] \Rightarrow [/math] λ 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)

Кр2

Фотки

Кр3

Кр4