Некоторые элементы функциональных языков...
-
Upload
alexander-byndyu -
Category
Documents
-
view
506 -
download
2
description
Transcript of Некоторые элементы функциональных языков...
Некоторые элементы функциональных языков
программирования
Александр Карпич
3-я конференция .NET разработчиков25 сентября 2011
Императивное программирование
• Изменение состояния с помощью последовательности команд
• Состояния изменяются присваиванием
• Программа – последовательность инструкций по изменению состояния
Функциональное программирование
• Нет состояний;
• Нет присваиваний;
• Нет последовательного выполнения команд;
• Подобия циклов с помощью рекурсии;
• Функции высших порядков.
Достоинства ФП
• Более ясная семантика;
• Большее соответствие математическим моделям;
• Бо1льшая свобода исполнения операций.
Достоинства ФП
• Выразительность и элегантность;
• Параметризация и модульность;
• Удобные способы представления бесконечных данных.
λ -исчисление — основа ФП
• 1930-е г. – А. Чёрч разработал теорию λ-исчисления;
• 1958 г. – Дж. Маккарти изобрёл LISP;
• 1973 г. – Создан язык ML;
• 1985 г. – На основе ML создан Oсaml;
• 2002 г. – На основе OCaml создан F#
(λx.x x) (λx.x x) = (λx.x x) (λx.x x)
Получили невычислимое выражение.
(λx.1)(λx.x x) (λx.x x)
= (λy.y y) (λx.x x)
Основные элементы функциональных языков
программирования
• Type inference (вывод типов);
• Higher-order function (функция высшего порядка);
• Pattern matching (сопоставление с образцом);
Type inference
• Нет необходимости использовать явные декларации типов;
• Автоматический вывод типов;
• Модель типизации Хиндли-Милнера;
• Работает не всегда.
Higher-order function
Функция, принимающая или возвращающая функцию:
List.map (fun i -> i*i) [1; 2; 3; 4];; val it : int list = [1; 4; 9; 16]
Pattern matching
let xor x y =match x, y with
| true, true -> false| true, false -> true| false, true -> true| false, false -> false
;;val xor : bool -> bool -> bool
F# killer features:
• Мультипарадигменный язык с упором на функциональное программирование;
• Статическая типизация;
• Интероперабельность с .NET;
• Ленивые вычисления.
Система типов F#
• Типы значений• System.byte, System.Int32, System.Char и т.д.
• Типы функций
• string -> string -> string
• Присвоение значений• let value = 15;;• let mutable value = 77;;
Некоторые встроенные типыF#
• Кортеж – экземпляр класса Tuple>let tuple = “first”, 15, 16.8;;val tuple : string * int * float = (“first”, 15,
16.8)
• Список – неизменяемый тип
>let lst = [1; 1; 2; 3; 5; 8; 13];;val lst : int lst = [1; 1; 2; 3; 5; 8; 13]>let abc = [1 .. 5];;val abc : int lst = [1, 2, 3, 4, 5]
Объекты и классы
type Book = val title : stringval author : stringval publishDate : DateTime
new (t, a, pd) = {title = tauthor = apublishDate = pd}
Объекты и классы
type Book = val title : stringval author : stringval publishDate : DateTime
new (t:string, a:string, pd) = //произвольный код
{ title = tauthor = apublishDate = pd }
//произвольный код
Объекты и классы
type Book = (title : string, author : string,) = member this.Title = titlemember this.Author = author
Методы
• Начинаются с ключевого слова member
• Модификаторы public, private, internal
• Нет модификатора protected
• Поддержка перегрузки методов
Зачем это нужно?
• Расширить кругозор;
• Повысить производительность;
• Понять суть;
• Быть в курсе.
Типичные задачи
• Обработка данных
• синтаксический разбор;• компиляторы;• Data Mining;
• Вычислительные задачи
• Параллельное программирование