Скачать презентацию Функциональное программирование IV Типы Мотивация Скачать презентацию Функциональное программирование IV Типы Мотивация

FP IV (Types).pptx

  • Количество слайдов: 42

Функциональное программирование IV Типы Функциональное программирование IV Типы

Мотивация • Мотивация •

Технические причины: — Оптимизация — Статические проверки корректности — Документирование — Модульность, абстракция и Технические причины: — Оптимизация — Статические проверки корректности — Документирование — Модульность, абстракция и инкапсуляция

Реализации в языках • Нетипизированные: – BCPL, ISWIM, SASL • Динамическая типизация (run-time): – Реализации в языках • Нетипизированные: – BCPL, ISWIM, SASL • Динамическая типизация (run-time): – Lisp, Java. Script, Clojure , Erlang, Groovy, Lua, MATLAB, PHP, Prolog, Python, Ruby, Smalltalk, . . . • Статическая типизация (compile-time): – F#, Haskell, ML, OCaml, C, C++, C#, Java, D, Eiffel, Fortran, Go, Objective-C, Pascal, Scala, . . .

 •

 •

 •

 •

 •

Church-style typing • Church-style typing •

Задание • Задание •

Curry-style typing • Curry-style typing •

 •

 •

Type preservation • Type preservation •

 •

 •

 Смысл: Исключение из контекста информации о типизации связанных переменных не помешает типизации выражения. Смысл: Исключение из контекста информации о типизации связанных переменных не помешает типизации выражения. Доказательство: По структурной индукции на t. Если t — const, тривиально.

 •

 •

 •

 •

 •

Полиморфизм • Полиморфизм •

 •

Let-полиморфизм • Let-полиморфизм •

 •

 •

 •

Most general types (aka Principal types) • Most general types (aka Principal types) •

 •

 •

 •

 •

Строгая нормализация • Это свойство называется строгой нормализацией и приводит к тому, что чистое Строгая нормализация • Это свойство называется строгой нормализацией и приводит к тому, что чистое простое типизированное лямбда-исчисление лишается полноты по Тьюрингу. Класс выразимых в нём ф-ций очень ограничен.

 •

ML, OCaml, F# Чтобы создать на основе нашего представления о типизированном лямбдаисчислении язык программирования, ML, OCaml, F# Чтобы создать на основе нашего представления о типизированном лямбдаисчислении язык программирования, мы предпримем следующие шаги: • Выберем порядок редукции: если наш выбор падёт на ленивые (call-by-need) вычисления, то мы придём к языкам, подобным Haskell, если мы выберем аппликативный порядок, мы выведем ML

 •

 •

 • Для лёгкой манипуляции с данными введём механизм сопоставления с образцом (pattern matching) • Для лёгкой манипуляции с данными введём механизм сопоставления с образцом (pattern matching) • Улучшим синтаксис, введя значимые отступы для разделения блоков кода. Таким образом, мы получим язык программирования, очень похожий на любой из языков семейства ML.

ML Family ML (1973) Caml (1985) Lazy ML (1980 s) SML (1990) Miranda (1985) ML Family ML (1973) Caml (1985) Lazy ML (1980 s) SML (1990) Miranda (1985) OCaml (1996) Haskell (1990) F# (2002)

Дополнительные темы: • • Hindley-Milner and algorithm W Curry-Howard isomorphism Type classes Dependent and Дополнительные темы: • • Hindley-Milner and algorithm W Curry-Howard isomorphism Type classes Dependent and inductive types Existential and Abstract data types ATS Programming Language Lambda cube, Kinds