Haskell beginning ru

1,104 views

Published on

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

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,104
On SlideShare
0
From Embeds
0
Number of Embeds
635
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 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г.

    ×