Your SlideShare is downloading. ×
0
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Haskell
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Haskell

2,254

Published on

Haskell

Haskell

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

  • Be the first to like this

No Downloads
Views
Total Views
2,254
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
26
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Wstep ˛ Jezyk ˛ Przykłady Haskell ´ Tomek „QsoRiX” Rydzynski rydzyn@student.agh.edu.pl Koło Naukowe Informatyków BIT 27 listopada 2008 / Biwak QsoRiX Haskell
  • 2. Wstep ˛ Jezyk ˛ Przykłady Dobry wieczór! Nie znam Haskella... Dlatego chetnie co´ o nim opowiem ˛ s ´ Je´ li macie pytania, smiało s QsoRiX Haskell
  • 3. Wstep ˛ Jezyk ˛ Przykłady Plan na dzi´ s 1 Wstep ˛ Haskell Kto tego u˙ ywa? z Jak to wyglada? ˛ 2 Jezyk ˛ Podstawowe struktury danych Cukier System typów Cz˛ sciowa aplikacja e´ 3 Kilka przykładów i programowanie funkcyjne Rot13 Kalkulator RPN Hello World w Gtk+ Watki ˛ QsoRiX Haskell
  • 4. Wstep ˛ Haskell Jezyk ˛ Kto tego u˙ ywa? z Przykłady Jak to wyglada? ˛ Programowanie funkcyjne Maszyna Turinga vs Rachunek Lambda Program jest funkcja, wykonanie polega na wyznaczeniu ˛ jej warto´ ci s Funkcje sa obiektami pierwszej kategorii – to tylko ˛ warto´ ci, które chca argumenty s ˛ Przykłady: SQL, Arkusze kalkulacyjne, Scheme, Erlang, Haskell QsoRiX Haskell
  • 5. Wstep ˛ Haskell Jezyk ˛ Kto tego u˙ ywa? z Przykłady Jak to wyglada? ˛ Zalety programowania funkcyjnego Mówimy „co” zamiast „jak” chcemy obliczy´ c Zmniejsza sie odstep miedzy idea algorytmu a jego ˛ ˛ ˛ ˛ zapisem Kod jest zwykle krótszy s´ wy˙ sza produktywno´ c z łatwiejsze zarzadzanie ˛ s´ ˛ mniejsza ilo´ c błedów QsoRiX Haskell
  • 6. Wstep ˛ Haskell Jezyk ˛ Kto tego u˙ ywa? z Przykłady Jak to wyglada? ˛ Historia ’88 – ustalono nazwe ˛ ’98 – zamro˙ ony release z ’99 – rozwiazano komitet ˛ ’02 – wydano poprawiony standard ´ zima ’08 – Rydzynski, T. zaczyna uczy´ sie Haskella c ˛ ´ ´ jesien ’08 – Rydzynski, T. zaczyna uczy´ Haskella c QsoRiX Haskell
  • 7. Wstep ˛ Haskell Jezyk ˛ Kto tego u˙ ywa? z Przykłady Jak to wyglada? ˛ Co to jest? Jezyk... ˛ czysto funkcyjny: leniwe warto´ ciowanie s brak efektów ubocznych brak zmiennych statycznie i silnie typowany QsoRiX Haskell
  • 8. Wstep ˛ Haskell Jezyk ˛ Kto tego u˙ ywa? z Przykłady Jak to wyglada? ˛ Małe porównanie Evaluation IO Typing Pure Haskell lazy monads static yes Clean lazy uniqueness static yes Miranda lazy lazy lists static yes ML strict side-effects static no Scheme strict side-effects dynamic no Erlang strict side-effects dynamic1 no http://haskell.org/haskellwiki/Comparison_of_functional_programming_languages 1 with compiler annotations for static typing QsoRiX Haskell
  • 9. Wstep ˛ Haskell Jezyk ˛ Kto tego u˙ ywa? z Przykłady Jak to wyglada? ˛ Kto tego u˙ ywa? z Lista ze strony www.haskell.org: Glasgow Haskell Compiler (GHC) – 100k lini kodu Darcs – system kontroli wersji Pugs – implementacja Perla 6 Credit Suisse Antiope Amgen ABN AMRO Peerium, Inc Galois, Inc Microsoft Research Bluespec, Inc Eaton Corporation Qualcomm, Inc Deutsche Bank QsoRiX Haskell
  • 10. Wstep ˛ Haskell Jezyk ˛ Kto tego u˙ ywa? z Przykłady Jak to wyglada? ˛ Silnia 1 dla n = 0 n! = n(n − 1)! dla n ≥ 1 fact n | n == 0 = 1 | n >= 1 = n * fact (n-1) n n! = k k =1 fact n = product [1..n] QsoRiX Haskell
  • 11. Wstep ˛ Haskell Jezyk ˛ Kto tego u˙ ywa? z Przykłady Jak to wyglada? ˛ QuickSort qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs) QsoRiX Haskell
  • 12. Wstep ˛ Haskell Jezyk ˛ Kto tego u˙ ywa? z Przykłady Jak to wyglada? ˛ Pochwała lenistwa s´ > Cze´c! > > Przepraszam, ˙e odpisuj˛ dopiero teraz, z e > ale ostatnio uczyłem si˛ Haskella... e pre s = quot;> quot; ++ s main = putStr.unlines.(map pre).lines=<<getContents main = interact $ unlines . (map (quot;> quot;++)) . lines QsoRiX Haskell
  • 13. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Lista Dowolnej długo´ ci s Mo˙ e zawiera´ elementy tylko jednego typu z c Typowa budowa: głowa i ogon Składnia [ 1 , 2 , 3 , 4 ] 1 : [ 2 , 3 , 4 ] 1 : 2 : 3 : 4 : [] QsoRiX Haskell
  • 14. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Krotka Odpowiednik krotek z algebry s´ Długo´ c jest okre´ lona s Typ elementów mo˙ e by´ ró˙ ny z c z Składnia ( 12 , GR , quot;tylko nie płacz prosz˛quot; ) e QsoRiX Haskell
  • 15. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ ... poza tym W standardowej bibliotece sa miedzy innymi: ˛ Array ByteString Graph HashTable List Map Sequence Set Time Tree QsoRiX Haskell
  • 16. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Dopasowanie warto´ ci atrybutów s ack 0 y = y + 1 ack x 0 = ack (x-1) 1 ack x y = ack (x-1) (ack x (y-1)) fst (x, _) = x snd (_, y) = y QsoRiX Haskell
  • 17. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Guards sign x | x > 0 = 1 | x == 0 = 0 | x < 0 = -1 QsoRiX Haskell
  • 18. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ List comprehensions [ (x, y) | x <- [-5..5] , y <- [-x..x] , x+y == 3 ] [(2,1), (3,0), (4,-1), (5,-2)] QsoRiX Haskell
  • 19. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Własne operatory a ## b = a + b + a^b (##) a b = a + b + a^b 2 ## 3 == 13 a ‘sq‘ b = a^2 + b^2 sq a b = a^2 + b^2 2 ‘sq‘ 5 == 29 QsoRiX Haskell
  • 20. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Silne typowanie i inferencja Wszystkie obiekty (czyli tak˙ e funkcje) posiadaja swój typ, z ˛ c s´ chocia˙ mo˙ e on by´ do´ c ogólny – polimorficzny z z Nie trzeba podawa´ typów, sa one dedukowane na c ˛ podstawie ró˙ nych wskazówek i operatorów z jakich z budujemy wyra˙ enie z Jawne okre´ lanie typu bywa bardzo pomocnym elementem s dokumentujacym i cz˛ ˛ esto ułatwia prace ˛ QsoRiX Haskell
  • 21. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Typowanie - przykład Składnia -- Nadanie stałej 10 typu Integer 10 :: Integer -- Typ funkcji add :: Integer -> Integer -> Integer -- Typ polimorficzny oraz lista repeat :: a -> [a] QsoRiX Haskell
  • 22. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Inferencja - przykład Kompilator domy´ lnie u˙ ywa jak najbardziej ogólnych s z typów z ´ Ograniczenia sa „dziedziczone” tak, aby typ wyra˙ en ˛ zło˙ onych był w zgodzie z typami składowych czastkowych z ˛ Mechanizm inferencji repeat :: a -> [a] 3 :: Integer repeat 3 :: [Integer] QsoRiX Haskell
  • 23. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Inferencja - przykład c.d. Je˙ eli kompilator nie mo˙ e dopasowa´ typów tak, aby z z c zachowa´ wszystkie wymagania, sygnalizowany jest bład c ˛ Mechanizm inferencji add :: Integer -> Integer -> Integer add x y = x + y ghci> :t quot;fooquot; quot;fooquot; :: [Char] ghci> add quot;fooquot; quot;barquot; Couldn’t match expected type ‘Integer’ against inferred type ‘[Char]’ QsoRiX Haskell
  • 24. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Klasy Skojarzenie z OOP jest mylace, chocia˙ z drugiej strony. . . ˛ z Okre´ laja zestaw operacji mo˙ liwych do wykonania na s ˛ z typach wchodzacych w skład klasy ˛ Pozwalaja zdefiniowa´ zachowania funkcji w zale˙ no´ ci od ˛ c z s typów argumentów Polimorfizm statyczny QsoRiX Haskell
  • 25. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Klasy - jak to działa Klasa Eq jest cz˛ scia biblioteki standardowej. Nale˙ a do niej e´ ˛ z˛ typy, które mo˙ na porównywa´ . z c Klasa Eq class Eq a where (==) :: a -> a -> Bool (/=) :: a -> a -> Bool Je´ li typ jest elementem klasy Eq, mo˙ na u˙ ywa´ z nim s z z c ˙ operatorów == i /=. I vice-versa – zeby typ był elementem klasy Eq trzeba zdefiniowa´ , jak beda sie te operatory zachowywa´ . c ˛ ˛ ˛ c QsoRiX Haskell
  • 26. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Własne typy danych Typy algebraiczne wprowadzane słowem kluczowym data sa odpowiednikiem struktur i unii znanych np. z C, poza ˛ tym umieja wiecej ˛ ˛ Słowem kluczowym type mo˙ na wprowadzi´ synonim typu, z c np. type String = [Char] Dyrektywa newtype wprowadza nowy typ wykorzystujacy ˛ reprezentacje istniejacego ˛ ˛ Zda˙ e tylko wspomnie´ o oferowanych mo˙ liwo´ ciach :( ˛z ˛ c z s QsoRiX Haskell
  • 27. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Własne typy danych - przykład Kolory data Kolor = Czerwony | Niebieski | Pomara´czowy n Drzewo data Tree a = Node (Tree a) a (Tree a) | Leaf -- przykład type TreeOfInts = Tree Int QsoRiX Haskell
  • 28. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Dziedziczenie klas 1/3 Byłoby miło porównywa´ nasze kolory... c ghci> Czerwony == Czerwony <interactive>:1:0: No instance for (Eq Kolor) arising from a use of ‘==’ Possible fix: add an instance declaration for (Eq Kolor) QsoRiX Haskell
  • 29. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Dziedziczenie klas 2/3 Typ do wybranej klasy mo˙ na doda´ u˙ ywajac konstrukcji z c z ˛ instance instance Eq Kolor where (==) Czerwony Czerwony = True (==) Niebieski Niebieski = True (==) Pomara´czowy Pomara´czowy n n = True (==) _ _ = False ˙ Uwierzcie na słowo, ze to działa QsoRiX Haskell
  • 30. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Dziedziczenie klas 3/3 Kolory dziedziczace Eq ˛ data Kolor = Czerwony | Niebieski | Pomara´czowy n deriving(Eq) Kompilator potrafi wygenerowa´ za nas sensowne instancje dla c wszystkich klas ze standardowej biblioteki ghci> Czerwony == Czerwony True ghci> Czerwony == Niebieski False QsoRiX Haskell
  • 31. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Wszystko razem Funkcja delete ma usuwa´ pierwsze wystapienie zadanej c ˛ warto´ ci z listy s delete delete x [] = [] delete x (y:ys) = if x == y then ys else y : (delete x ys) Jakiego typu jest ta funkcja? ghci> :t delete delete :: (Eq a) => a -> [a] -> [a] QsoRiX Haskell
  • 32. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Podsumowanie ˙ Statyczne typowanie zapewnia, ze skompilowany program nie posiada trywialnych błedów ˛ Brak domy´ lnych konwersji przekre´ la cała klase ró˙ nego s s ˛ ˛ z rodzaju problemów ˙ Inferencja – typowanie dostajemy bez zadnego balastu Klasy pozwalaja na tworzenie konceptów i statyczny ˛ polimorfizm <flame>Najlepszy system typów z jakim sie ˛ spotkałem</flame> s´ „Wiekszo´ c kodu w Haskellu działa, o ile uda sie go ˛ ˛ skompilowa´ .” c QsoRiX Haskell
  • 33. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Cz˛ sciowa aplikacja e´ Majac funkcje, która dodaje jedna liczbe do drugiej, łatwo ˛ ˛ ˛ ˛ zrobi´ funkcje, która do liczby dodaje jeden c ˛ Majac funkcje, która porównuje dwie liczby, łatwo zrobi´ ˛ ˛ c funkcje, która porównuje liczbe z zerem ˛ ˛ Majac funkcje, która wybiera z listy elementy spełniajace ˛ ˛ ˛ warunek, łatwo zrobi´ funkcje, która wybiera z listy liczby c ˛ wieksze od zera ˛ QsoRiX Haskell
  • 34. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Przykład Łatwo zrobi´ funkcje, która porównuje liczbe z zerem... c ˛ ˛ (<) :: (Ord a) => a -> a -> Bool pos :: (Ord a, Num a) => a -> Bool pos = ( 0 < ) Łatwo zrobi´ funkcje, która wybiera z listy liczby wieksze od c ˛ ˛ zera... filter :: (a -> Bool) -> [a] -> [a] posInts :: (Ord a, Num a) => [a] -> [a] posInts = filter pos QsoRiX Haskell
  • 35. Podstawowe struktury danych Wstep ˛ Cukier Jezyk ˛ System typów Przykłady Cz˛ sciowa aplikacja e´ Wiecej o -> ˛ type UnaryOperator = Int -> Int addSome :: Int -> UnaryOperator -- (1) addSome x = (+) x addSome :: Int -> UnaryOperator -- (2) addSome x = y -> (+) x y addSome :: Int -> Int -> Int -- (3) addSome x y = (+) x y addSome :: (Int -> UnaryOperator) -- (4) addSome = (+) QsoRiX Haskell
  • 36. Wstep ˛ Jezyk ˛ Przykłady Gdzie mo˙ na poczyta´ z c Real World Haskell www.haskell.org http://haskell.org/haskellwiki/Introduction http://haskell.org/haskellwiki/Why_Haskell_matters . . . i reszta Wiki Hoogle google://Haskell QsoRiX Haskell
  • 37. Wstep ˛ Jezyk ˛ Przykłady ´ Co za tydzien? Krzysiek Goj Scala 3 grudnia 2008 QsoRiX Haskell
  • 38. Wstep ˛ Jezyk ˛ Przykłady Koniec Dobranoc QsoRiX Haskell

×