Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемyauhen.yakimovich.info
1 Язык Haskell Обзор Eugeny L Yakimovitch
2 Литература 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 прочее
3 Реализации Среди прочих существуют две наиболее распространенные реализации HUGS GHC
4 Особенности Строго типизированный чисто функциональный ЯП Поддержка ленивых вычислений Краткая (часто, рекурсивная) форма записи, основанная на формализме конструктивной математики Всякое вычисление (интерпретация) + программа есть приближение функции f::S->T, где S,T некоторые типы Значение есть элементарное выражение и каждое значение имеет тип Функции высших порядков: функции это также значения, который выступают в роли аргументов и результатов других функций Другие известные достоинства ФЯП (см. haskell.org)
5 Особенности ЯП 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
6 Типовые задачи Получение остаточной процедуры Построение мат. описания функций Определение динамических структур Автоматическое построение значительной «части» программы Доказательства свойства программы Эквивалентная трансформация программ
7 Значения и выражения Базовыми составляющими языка являются значения Выражения образуются в результате применения (аппликации) функций к значениям (см. лямбда исчисление). Вычисления (редукция) продолжается до получения значений. Prelude> 'c' 'c' :: Char Prelude> 3 3 :: Integer Prelude> not True False :: Bool Prelude> 5>7 False :: Bool Prelude> :: Integer
8 Условные выражения Условное выражение является вычислимым выражением, а не ключевым словом императивной языковой конструкции (т.е. как бы возвращает результат в результате вычисления) Prelude> if 2>3 then 4 else 5 5 :: Integer Prelude> if if 1
9 Лямбда выражения Для записи лямбда выражений в качестве символа греческой лямбда используется наклонная черта \ В качестве точки последовательность -> > (\x -> \y -> x + y) 1 2 3
10 Функции и модули module IntroExample (someFunction) Where someFunction :: Int -> [Int] -> [Int] someFunction n [] = [] someFunction n (x:xs) = (x + n) : someFunction n xs -- n - число, которое необходимо прибавить к каждому элементу списка.
11 Вычисление типов module TypeInference (Zero, Succ, One, Two, Three, Four, zero, one, two, three, four, Add, Mul, Fac) where Источник:
12 Алгебраический тип, олицетворяющий значение 0. data Zero Алгебраический тип, олицетворяющий следующее значение за заданным типом. data Succ n
13 Синонимы типов для представления чисел от 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
14 Класс для представления операции сложения (в механизме вывода типов). 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)
15 Класс для представления операции умножения (в механизме вывода типов). 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
16 Класс для представления процесса вычисления факториала (в механизме вывода -- типов). 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
17 Ввод-вывод Writes baz to the file called foo. No result displayedwonder why not? Prelude> writeFile "foo" "baz" Prelude> ">
18 Пример ввода-вывода module Main where import IO main = do hSetBuffering stdin LineBuffering doLoop
19 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 do putStrLn ("Reading " ++ filename) doRead filename doLoop 'w':filename -> do putStrLn ("Writing " ++ filename) doWrite filename doLoop _ -> doLoop">
20 doRead filename = bracket (openFile filename ReadMode) hClose (\h -> do contents
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.