Функциональное программирование Доклад на семинаре по специальности Студент гр.4057/2 Олег Хабаров 18.10.10.

Презентация:



Advertisements
Похожие презентации
Лекция 1 Классификация С++. Парадигмы программирования Императивная Функциональная Декларативная (логическая) Инструкция 1 Инструкция 2 Инструкция 3 Инструкция.
Advertisements

Функциональное программирование Язык программирования F#.NET.
Язык функционального программирования Haskell Выполнила: Шатохина Е.В. ПИБ-41.
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
1 Кубенский А.А. Функциональное программирование. Глава 5. Системы исполнения функциональных программ. Глава 5. Системы исполнения функциональных программ.
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
Обзор языка HASKELL. Основные идеи. Параллелизм в HASKELL Преподаватель: Мееров И.Б. Выполнили студенты: Панина К. Соломин С.
Обзор парадигм программирования. План 1. Структурное программирование 2. Объектно-ориентированное программирование 3. Функциональное программирование.
1 Кубенский А.А. Функциональное программирование. Глава 1. Элементы функционального программирования Введение в язык Haskell История языка Haskell.
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет Прикладной математики и физики Кафедра Вычислительной математики и программирования.
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
1 Кубенский А.А. Функциональное программирование. Глава 4. Основы лямбда-исчисления Рекурсия в лямбда-исчислении fac = λn.(if (= n 0) 1 (* n (fac.
1 Кубенский А.А. Функциональное программирование. Глава 5. Системы исполнения функциональных программ Eval / Apply-интерпретатор Интерпретация, основанная.
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Парадигмы программирования Денис С. Мигинский. Понятие парадигмы Парадигма (философия науки) – устоявшаяся система научных взглядов, в рамках которой.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Связанные и свободные переменные n λv.B n Переменная v называется связанной всюду в теле B функции λv.B, за исключением подвыражений B, где v переопределяется.
Язык C++ Лекция 2. Недостатки enumов Засорение namespaceа, в котором находится enum Соответственно, члены enumа должны иметь уникальный префикс.
Глава 1. Язык реализации: TSG. Супер- компиляция scp Специализация программ Приложения суперкомпиляции, в том числе Базовые понятия и методы метавычислений.
Транксрипт:

Функциональное программирование Доклад на семинаре по специальности Студент гр.4057/2 Олег Хабаров

Содержание Введение 1.Лямбда-исчисление как база парадигмы 2.Основы функционального программирования 3.Преимущества и недостатки 4.Языки 1.Lisp 2.Haskell 3.Erlang 4.ML 5.OCaml 6.F# 5.Ссылки Заключение Хабаров О.В. 4057/22

Введение Импертивное программирование как основная парадигма программирования Описывает порядок действий (как получить результат?) Декларативное программирование описывает свойства (каким должен быть результат?) Функциональное программирование – противоположность императивному Хабаров О.В. 4057/23

Лямбда-исчисление Формальная система для описания функций, их приложений и рекурсии Термами являются(и только они) – переменные – абстракции(описание функции) – приложения(вызов функции) Альфа-эквивалентность Свободные переменные Хабаров О.В. 4057/24

Основы функционального программирования Объекты вычисления - функции Отсутствие хранения состояния программы в явном виде Функции высших порядков Чистые функции Рекурсия Подход к вычислению аргументов – Строгое – Отложенное(ленивое) Оптимизация хвостовой рекурсии Хабаров О.В. 4057/25

Преимущества и недостатки Преимущества – Повышение надёжности кода – Удобство тестирования – Лучшая оптимизация при компиляции – Автоматическая оптимизация на параллельные вычисления Недостатки – Интенсивное использование динамической памяти – Отсутствие «синтаксического сахара» Хабаров О.В. 4057/26

Языки Главная проблема «чистого языка» - побочные эффекты Чистые реализации используют монады для взаимодействия с окружающим миром Большинство языков поддерживают парадигму функционального программирования, но не ограничиваются ей Хабаров О.В. 4057/27

Языки(2) Хабаров О.В. 4057/28

Lisp ФП - опорная парадигма Главные диалекты – Common Lisp и Scheme Допускается императивность Steel Bank Common lisp – стандартизован ANSI, компилируемый. Показывает отличную производительность Пример – вычисление факториала (defun factorial (n) (if (

Haskell Стандартизованный чистый язык ФП Реализует отложенные вычисления Монады позволяют использовать графику, ввод/вывод, … Пример простой функции – на С int foo (int x){ return x * ; } – на Haskell foo :: Int -> Int foo bar = bar * Хабаров О.В. 4057/210

Haskell(2) Использование OpenGL – рисование точек import Graphics.Rendering.OpenGL import Graphics.UI.GLUT myPoints :: [(GLfloat,GLfloat,GLfloat)] myPoints = map (\k -> (sin(2*pi*k/12),cos(2*pi*k/12),0.0))[1..12]mapsinpicospi main = do (progname, _) vertex$Vertex3 x y z) myPoints$mapM_ flush Хабаров О.В. 4057/211

Erlang Назначение – распределённые вычислительные системы Текущая реализация интерпретируемая, хотя поддерживается компилятор Куски кода могут заменяться в run-time Старая и новая версия модуля могут использоваться одновременно Пример – вычисление факториала -module(fact). -export([fac/1]). factorial(0) -> 1; factorial(N) -> N*factorial(N-1) Хабаров О.В. 4057/212

Erlang(2) Виртуальная машина - узел, обладающей именем Узлы на одной машине и на разных не имеют различий Каждый процесс может создавать потоки на разных узлах Отсутствие присваиваний облегчает параллельное программирование Хабаров О.В. 4057/213

ML ML – meta language, Не скрывает побочных эффектов Строгие вычисления Статическая типизация Основные диалекты – Standart ML и Caml Применения – финансовые системы – приложения peer-to-peer – иерархические базы данных Хабаров О.В. 4057/214

OCaml Objective Caml – найболее используемая реализация диалекта Caml Объединяет функциональное, императивное и объектно- ориентированное программирование Совместимость типов объектов также определяется по сигнатуре методов Quick sort let rec qsort = function | [] -> [] | pivot :: rest -> let is_less x = x < pivot in let left, right = List.partition is_less rest in qsort qsort righ t Хабаров О.В. 4057/215

Ocaml(2) Пример объединения(С) struct foo { int type; #define TYPE_INT 1 #define TYPE_PAIR_OF_INTS 2 #define TYPE_STRING 3 union { int i;// If type == TYPE_INT int pair[2]; // If type == TYPE_PAIR_OF_INTS char *str; // If type == TYPE_STRING } u; }; Пример объединения(OCaml) type foo = Nothing | Int of int | Pair of int * int | String of string;; Хабаров О.В. 4057/216

F# F# - диалект ML от Microsoft Интегрирован в MSVS 10 Согласован с.NET Функциональная часть поддерживает кортежи, структуры и списки Императивная часть языка позволяет использовать конструкции for, while и массивы Поддержка объектно-ориентированных конструкций Хабаров О.В. 4057/217

F#(2) Пример на создание окна open System open System.Windows.Forms let form = new Form(Visible=true, TopMost=true, Text="Welcome to F#") let label = let temp = new Label() let x = 3 + (4 * 5) temp.Text

Заключение Развитие функциональных языков в производственной сфере Модульность и функции высших порядков – ключ к успеху Нет однозначного мнения насчёт ленивых вычислений Хабаров О.В. 4057/219

Ссылки Functional Programming//Wikipedia. Haskell//Wikipedia. Haskell OpenGL. Erlang//Wikipedia. F#//Wikipedia. guage) Практика функционального программирования. – Хабаров О.В. 4057/220

Спасибо за внимание!