1 / 20

Язык Haskell

Язык Haskell. Обзор. Eugeny L Yakimovitch http://desk.by/~ewger 2008. Литература. Thompson S. Haskell: The Craft of Functional Programming. 2-nd edition, Addison-Wesley, 1999. Bird R. Introduction to Functional Programming using Haskell. 2-nd edition, Prentice Hall Press, 1998.

Download Presentation

Язык Haskell

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Литература • Thompson S. Haskell: The Craft of Functional Programming. 2-nd edition, Addison-Wesley, 1999. • Bird R. Introduction to Functional Programming using Haskell. 2-nd edition, Prentice Hall Press, 1998. • Душкин Р. В. Функциональноепрограммирование на языке Haskell. –М.:ДМК Пресс, 2007 • Koen Lindstruem Claessen // http://www.cs.chalmers.se/Cs/Grundutb/Kurser/funht/index.html, 2008-02-04 • прочее

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

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

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

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

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

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

  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 Источник: http://www.willamette.edu/~fruehr/haskell/evolution.html

  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 displayed—wonder 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 <- getLine case command of 'q':_ -> return () 'r':filename -> 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 <- hGetContents h putStrLn "The first 100 chars:" putStrLn (take 100 contents)) doWrite filename = do putStrLn "Enter text to go into the file:" contents <- getLine bracket (openFile filename WriteMode) hClose (\h -> hPutStrLn h contents)

More Related