Язык Haskell Обзор Eugeny L Yakimovitch http://desk.by/~ewger 2008 http://desk.by/~ewger.

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



Advertisements
Похожие презентации
Обзор языка HASKELL. Основные идеи. Параллелизм в HASKELL Преподаватель: Мееров И.Б. Выполнили студенты: Панина К. Соломин С.
Advertisements

1 Кубенский А.А. Функциональное программирование. Глава 4. Основы лямбда-исчисления Рекурсия в лямбда-исчислении fac = λn.(if (= n 0) 1 (* n (fac.
1 Кубенский А.А. Функциональное программирование. Глава 5. Системы исполнения функциональных программ Eval / Apply-интерпретатор Интерпретация, основанная.
1 Кубенский А.А. Функциональное программирование. Глава 1. Элементы функционального программирования Введение в язык Haskell История языка Haskell.
Язык функционального программирования Haskell Выполнила: Шатохина Е.В. ПИБ-41.
Функциональное программирование Курс лекций для студентов 4 курса ЕНФ.
1 Д.з. Shape – типичные ошибки contains (Circle r x y) a b = if (sqrt ((x-a)^2+(y-b)^2)) Double contains:: a -> Double -> Double -> Bool instance Shape.
1 Кубенский А.А. Функциональное программирование. Глава 5. Системы исполнения функциональных программ. Глава 5. Системы исполнения функциональных программ.
1 Кубенский А.А. Функциональное программирование. Глава 5. Системы исполнения функциональных программ. Глава 5. Системы исполнения функциональных программ.
1 Кубенский А.А. Функциональное программирование. Глава 4. Основы лямбда-исчисления Рекурсия в лямбда-исчислении fac = λn.(if (= n 0) 1 (* n (fac.
1 Кубенский А.А. Функциональное программирование. Глава 2. Средства функционального программирования. Еще один пример функциональной программы
Лекция 1 Классификация С++. Парадигмы программирования Императивная Функциональная Декларативная (логическая) Инструкция 1 Инструкция 2 Инструкция 3 Инструкция.
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Программирование типовых алгоритмов вычислений Информатика.
Процедуры и функции Вербицкая Ольга Владимировна, Заозерная школа 16.
1 Кубенский А.А. Функциональное программирование. Глава 2. Средства функционального программирования. Потоки. «Завязывание узлов» Часто обработку данных.
3. Математические основы 3.3. Матиндукция 5. Построение языка предикатного программирования. Методы доказательства корректности предикатных программ Методы.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 5.
Транксрипт:

Язык Haskell Обзор Eugeny L Yakimovitch

Литература Thompson S. Haskell: The Craft of Functional Programming. 2-nd edition, Addison-Wesley, Bird R. Introduction to Functional Programming using Haskell. 2-nd edition, Prentice Hall Press, Душкин Р. В. Функциональное программирование на языке Haskell. –М.:ДМК Пресс, 2007 Koen Lindstruem Claessen // ex.html, ex.html прочее

Реализации Среди прочих существуют две наиболее распространенные реализации HUGS GHC

Особенности Строго типизированный чисто функциональный ЯП Поддержка ленивых вычислений Краткая (часто, рекурсивная) форма записи, основанная на формализме конструктивной математики Всякое вычисление (интерпретация) + программа есть приближение функции f::S->T, где S,T некоторые типы Значение есть элементарное выражение и каждое значение имеет тип Функции высших порядков: функции это также значения, который выступают в роли аргументов и результатов других функций Другие известные достоинства ФЯП (см. haskell.org)

Особенности ЯП polymorphism higher-order functions statically typed parameterized types overloading type classes object oriented reflection meta- programming compiler virtual machine interpreter pure functions lazy high performance type inference dynamically typed immutable datastructures concurrency distribution real-time Haskell unification backtracking Java C

Типовые задачи Получение остаточной процедуры Построение мат. описания функций Определение динамических структур Автоматическое построение значительной «части» программы Доказательства свойства программы Эквивалентная трансформация программ

Значения и выражения Базовыми составляющими языка являются значения Выражения образуются в результате применения (аппликации) функций к значениям (см. лямбда исчисление). Вычисления (редукция) продолжается до получения значений. Prelude> 'c' 'c' :: Char Prelude> 3 3 :: Integer Prelude> not True False :: Bool Prelude> 5>7 False :: Bool Prelude> :: Integer

Условные выражения Условное выражение является вычислимым выражением, а не ключевым словом императивной языковой конструкции (т.е. как бы возвращает результат в результате вычисления) Prelude> if 2>3 then 4 else 5 5 :: Integer Prelude> if if 1

Лямбда выражения Для записи лямбда выражений в качестве символа греческой лямбда используется наклонная черта \ В качестве точки последовательность -> > (\x -> \y -> x + y) 1 2 3

Функции и модули module IntroExample (someFunction) Where someFunction :: Int -> [Int] -> [Int] someFunction n [] = [] someFunction n (x:xs) = (x + n) : someFunction n xs -- n - число, которое необходимо прибавить к каждому элементу списка.

Вычисление типов module TypeInference (Zero, Succ, One, Two, Three, Four, zero, one, two, three, four, Add, Mul, Fac) where Источник:

Алгебраический тип, олицетворяющий значение 0. data Zero Алгебраический тип, олицетворяющий следующее значение за заданным типом. data Succ n

Синонимы типов для представления чисел от 1 до 4 (для примера). Статическое -- представление чисел по аксиоматике Пеано. type One = Succ Zero type Two = Succ One type Three = Succ Two type Four = Succ Three Функции для динамического представления чисел от 1 до 4 (для примера). zero = undefined :: Zero one = undefined :: One two = undefined :: Two three = undefined :: Three four = undefined :: Four

Класс для представления операции сложения (в механизме вывода типов). class Add a b c | a b -> c where add :: a -> b -> c Экземпляры класса Add для представления операции сложения. instance Add Zero b b instance Add a b c => Add (Succ a) b (Succ c)

Класс для представления операции умножения (в механизме вывода типов). class Mul a b c | a b -> c where mul :: a -> b -> c Экземпляры класса Mul для представления операции умножения. instance Mul Zero b Zero instance (Mul a b c, Add b c d) => Mul (Succ a) b d

Класс для представления процесса вычисления факториала (в механизме вывода -- типов). class Fac a b | a -> b where fac :: a -> b Экземпляры класса Fac для представления процесса вычисления факториала. instance Fac Zero One instance (Fac n k, Mul (Succ n) k m) => Fac (Succ n) m

Ввод-вывод Writes baz to the file called foo. No result displayedwonder why not? Prelude> writeFile "foo" "baz" Prelude>

Пример ввода-вывода module Main where import IO main = do hSetBuffering stdin LineBuffering doLoop

doLoop = do putStrLn "Enter a command rFN wFN or q to quit:" command return () 'r':filename -> do putStrLn ("Reading " ++ filename) doRead filename doLoop 'w':filename -> do putStrLn ("Writing " ++ filename) doWrite filename doLoop _ -> doLoop

doRead filename = bracket (openFile filename ReadMode) hClose (\h -> do contents