Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Haskell beginning ru

1,159 views

Published on

Презентация с семинара по Хаскелю для начинающих

Published in: Education
  • Be the first to comment

  • Be the first to like this

Haskell beginning ru

  1. 1. HaskellИ н с т р у к ц и я п оп р и г о т о в л е н и ю « Д о к а з а т е л ь с т в о - э т о п р о г р а м м а , а д о к а з ы в а е м а я ф о р м у л а - э т о т и п п р о г р а м м ы » Х . К а р р и
  2. 2. Что такое функциональное программирование?http://ru.wikipedia.org/wiki/Функциональное_программирование
  3. 3. HaskellФункциональныйС поддержкой отложенных вычисленийТипизация строгая, статическая
  4. 4. Где взять?http://hackage.haskell.org/platform/
  5. 5. Hello world?main = putStrLn "hello, world" 
  6. 6. Compileghc --make hello.hs
  7. 7. Haskell Console ghci
  8. 8. Алгебраghci> 2 + 15  17  ghci> 49 * 100  4900  ghci> 1892 - 1472  420  ghci> 5 / 2  2.5  ghci> 50 * 100 - 4999  1  ghci> 50 * (100 - 4999)  -244950  
  9. 9. Логические операции ghci> 5 == 5  ghci> True && False True  False ghci> 1 == 0  ghci> True && True False  True ghci> 5 /= 5  ghci> False || True False  True ghci> 5 /= 4  ghci> not False   False  True ghci> "hello" == "hello" True
  10. 10. Syntactic sugarghci> succ 8  9ghci> min 3.4 3.2  3.2  ghci> max 100 101  101 ghci> succ 9 + max 5 4 + 1  16  ghci> ( succ 9 ) + ( max 5 4 ) + 1  16  ghci> div 92 109ghci> 92 `div` 109
  11. 11. Baby functionbaby.hs
  12. 12. Baby functionbaby.hsdoubleMe x = x + x  
  13. 13. Baby functionbaby.hsdoubleMe x = x + x  ghci> :l baby  ghci> doubleMe 9ghci> doubleMe 8.9
  14. 14. Try yourselfdoubleUs x y = x*2 + y*2  
  15. 15. Try yourselfdoubleUs x y = x*2 + y*2   Main> doubleUs 2 3 Main> 2 `doubleUs` 3
  16. 16. Listsghci> 1 : []ghci> 1 : 2 : []
  17. 17. Listsghci> 1 : []ghci> 1 : 2 : []Syntactic sugar ;)ghci> let a = [1,2]ghci> a
  18. 18. Listsghci> 1 : []ghci> 1 : 2 : []Syntactic sugar ;) ghci> [h,e,l,l,o]ghci> let a = [1,2]ghci> a
  19. 19. ListsLists are a homogenous structure! ghci> [h,1,3,b]
  20. 20. Listsghci> [1,2,3,2] !! 23 ghci> [1,2,3,2] ++ [2,3]ghci> [2,4] : [[1,2,3,2]] [1,2,3,2,2,3][[2,4],[1,2,3,2]] ghci> [3,9,1] > [2,1,0]ghci> 2 : [1,2,3,2] True[2,1,2,3,2]
  21. 21. ListsПолучение элементов списка ghci> let a = [3,2,5,7,9,1] ghci> head a ghci> tail a ghci> init a ghci> last a
  22. 22. Try it yourself length <list> null <list> reverse <list> take <int> <list> drop <int> <list> maximum <list> minimum <list> sum <list> product <list> <int> `elem` <list>
  23. 23. Rangesghci> [1..15][1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]ghci> [a..z]"abcdefghijklmnopqrstuvwxyz"ghci> [K..Z]"KLMNOPQRSTUVWXYZ"
  24. 24. Rangesghci> [2,4..20]ghci> [3,6..20]ghci> [0.1, 0.3 .. 1]
  25. 25. Слово о лени [13,26..]
  26. 26. Слово о лени ghci> take 24 [13,26..][13,26,39,52,65,78,91,104,117,130,143,156,169,182,195,208,221, 234,247,260,273,286,299,312] ghci> take 10 (cycle [1,2,3]) [1,2,3,1,2,3,1,2,3,1] ghci> take 10 (repeat 5) [5,5,5,5,5,5,5,5,5,5]
  27. 27. List comprehensions ghci> [x*2 | x <- [1..10]]
  28. 28. List comprehensions ghci> [x*2 | x <- [1..10]] [2,4,6,8,10,12,14,16,18,20]
  29. 29. List comprehensions let chunkyBacon xs =[ if odd x then "chunky" else "bacon" | x <- xs, x < 100, x /= 0 ]
  30. 30. Do it yourselfghci> let adjectives = ["Maverick","Natty","Lucid","Oneiric"] ghci> let nouns = ["Lynx","Ocelot","Narwhal","Meerkat"]["Maverick Meerkat","Natty Narwhal","Lucid Lynx","Oneiric Ocelot"] Help functions: filter (> 0) <list>
  31. 31. Do it yourselfghci> let full_list = [ if (head adj) == (head noun) then adj ++ " " ++ noun else "" | adj <- adjectives, noun <- nouns]ghci> filter (/= "") full_list["Maverick Meerkat","Natty Narwhal","LucidLynx","Oneiric Ocelot"
  32. 32. Tuples Отличия кортежей от списковКортежи могут быть неоднородныКортежи имеют чётко заданную длинуКортежи разной длины имеют разные типы
  33. 33. Tuples Неоднородность("hello", "bacon", 515)
  34. 34. Немного о типахghci> :t aa :: Char ghci> :t [1,2,2] [1,2,2] :: Num t => [t]ghci> :t "hello""hello" :: [Char] ghci> :t 2.5 2.5 :: Fractional a => aghci> :t 11 :: Num a => a ghci> :t fst fst :: (a, b) -> aghci> :t [1,2,2.5][1,2,2.5] :: Fractional t => [t]
  35. 35. Немного о типахghci> :t [1,2][1,2] :: Num t => [t]ghci> :t [1,2,3][1,2,3] :: Num t => [t]ghci> :t ("hello", "bacon")("hello", "bacon") :: ([Char], [Char])ghci> :t ("hello", "bacon", 515)("hello", "bacon", 515) :: Num t => ([Char], [Char], t)
  36. 36. Lists of tuplesghci> :t [(1,2),(8,11),(4,5)][(1,2),(8,11),(4,5)] :: (Num t1, Num t) => [(t, t1)]ghci> :t [(1,2),(8,11,9),(4,5)]
  37. 37. Tuples functionsghci> fst (1,"sad")1ghci> snd (1,"sad")"sad"ghci> zip [1..] ["one", "two", "three", "four", "five"][(1,"one"),(2,"two"),(3,"three"),(4,"four"),(5,"five")]
  38. 38. Last do it yourself
  39. 39. Last do it yourselfНайти все возможные прямоугольныетреугольники. (записать длины их сторон вкортежи)Максимально возможная длина стороны -10
  40. 40. Last do it yourself Решение:let rightTriangles = [ (a,b,c) | c <- [1..10], b <- [1..c], a <- [1..b], a^2 + b^2 == c^2]
  41. 41. Использованная литература http://learnyouahaskell.com http://tryhaskell.org http://zvon.org/other/haskell/Outputglobal/ index.html
  42. 42. Семинар подготовил: Зонов Кирилл Блог: http://graffzon.tumblr.com/ 2012г.

×