
- •1. Поколения языков программирования.
- •2.Понятие фп, история развития.
- •1 . Трактовка функции через понятие переменная
- •2. Определения без переменных:
- •3.Программирование при помощи функций.
- •4. Программирование при помощи процедур.
- •5. Символьные данные в строго-функциональных языках.
- •6.Элементарные селекторы, конструкторы и предикаты.
- •7. Рекурсивные функции.
- •8. Проблема выбора подфункции
- •9. Накапливающий параметр — аккумулятор
- •10. Локальное определение.
- •11. Функции высших порядков.
- •12. Фвп применительно к языку Haskell.
- •13. Основы лямбда исчисления
- •14. Правило преобразования лямбда выражения.
- •15. Ромбическое свойство системы редукций.
- •16. Стандартные порядки редукций.
- •18. Структуры данных и их типы на языке Haskell.
- •1. Синонимы типов
- •19. Понятие модуля в Haskell.
- •Абстрактные типы данных
- •Другие аспекты использования модулей
- •20. Классы и их экземпляры в Haskell.
- •21. Наследование в языке Haskell.
- •22. Сорта типов и структуры данных.
- •[Править]Определение
- •[Править]Примеры
13. Основы лямбда исчисления
Лямбда выражение является таким выражением, значением которого есть функция. Является правилом безымянным для вычисления значения по некоторому аргументу.
Основные типы:
Х
С
Применение функции
Определение функции лямда х.e – x аргумент, е- тело функции
Люмда х. – связывающее вхождение
+2х – использующее вхождение
decodeOne :: String -> [(String, String)] -> String
decodeOne _ [] = "error!\n"
decodeOne str (x:xs)
| str == fst x = fst x ++ " " ++ snd x ++ "\n"
| otherwise = decodeOne str xs
decode :: [String] -> [(String, String)] -> String
decode bs ts = concat $ map (\b -> decodeOne b ts) bs
14. Правило преобразования лямбда выражения.
β-редукция
правило применения лямбда выражения к аргументу
(λх.е1)е2->е1{х|е2}
Берем тело функции е1 и заменяем в нем все входждения Х на аргумент е2
Α-редукция
λх.е1->αz.e1{x|z}
При этом структура выражения не меняется. Z не должна до преобразования входить в е1.
δ-редукция
fe1e2e3->результат
правило применяется встроенной функции. +2δ4=6
η-преобразование
λх.Ех->E
если телом выражения является применение Е к х и в самом вхождении Е нет других свободных вхождений, то можно заменитьэто выражение на Е.
15. Ромбическое свойство системы редукций.
Определение: Пусть R — бинарное отношение на множестве S. Рефлексивное замыкание (reflexive closure) R — это наименьшее рефлексивное отношение R′, содержащее в себе R. (<<Наименьшее>> здесь означает, что, если имеется какое-то другое рефлексивное отношение R″, включающее все пары из R, то R′ ⊆ R″.) Аналогично, транзитивное замыкание (transitive closure) R — это наименьшее транзитивное отношение R′, содержащее R. Транзитивное замыкание R часто обозначается R+. Рефлексивно-транзитивное замыкание (reflexive and transitive closure) R — это наименьшее рефлексивное и транзитивное отношение, содержащее R. Оно часто обозначается R*.
Термы M и N назовем конгруэнтными (обозначим M ≡ N ), если один терм можно получить из другого переименованием связанных переменных. Далее, мы не будем различать конгруэнтные термы.
Понятие β -редукции определяется как следующее множество пар:
Tерм вида (λx. R)Q
называется β
-редексом
(далее просто редексом), а терм R [x : = Q]
= – его сверткой. Традиционным образом
определяются отношение одношаговой β
-редукции
,отношение β -редукции
и отношение β - равенства
Далее, условимся отношение одношаговой
β -редукции называть просто одношаговой
редукцией, а отношение β -редукции –
просто редукцией. Будем также опускать
символ β в соответствующих обозначениях,
т.е. отношение
обозначать →, отношение
–
→→, а отношение
– =.
Терм, не содержащий
редексов, называется β
-нормальной формой
(далее, просто нормальной формой).
Множество всех нормальных форм условимся
обозначать NF , а множество всех замкнутых
нормальных форм –
. Будем говорить, что терм M имеет
нормальную форму, если существует терм
N∈
NF такой, что M=N .
Теорема Черча-Россера.
a) Если
,
то существует такой терм N , что
и
.
b) Если
,
то существует такой терм N , что
.
Следствие теоремы Черча-Россера.
a) Если M = N , где N – нормальная форма, то M →→ N .
b) Если
и
,
где N1 и N2 – нормальные формы, то
.