Paradygmaty programowania

Podobne dokumenty
Elementy języka Haskell

- nawiasy kwadratowe oznaczają, że to lista

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Haskell. (w11)

Prezentacja o Haskell u(rozdział 3 i 4)

Języki i Paradygmaty Programowania

Programowanie funkcyjne (Haskell Wprowadzenie) Kowalik Adrian

Języki programowania Haskell

1. Wprowadzenie do C/C++

Typy, klasy typów, składnie w funkcji

1. Wprowadzenie do C/C++

TWORZENIE SWOICH TYPÓW I TYPÓW KLAS HASKELL (RODZIAŁ 8) ZAJĘCIA 4

Programowanie i struktury danych 1 / 44

Wprowadzenie do szablonów klas

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

FP vs OOP? Mikołaj Fejzer

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Haskell Moduły Ładowanie

Algorytmy i struktury danych. wykład 1

ROZDZIAŁ 8: KLASY TYPÓW

Przetwarzanie sygnaªów

Wzorce projektowe strukturalne cz. 1

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017

Programowanie funkcyjne. Wykªad 13

Informatyka 1. Przetwarzanie tekstów

Dr Michał Tanaś(

Programowanie obiektowe

MATERIAŁY DO ZAJĘĆ II

Tworzenie własnych typów. danych oraz klas typów

Podstawy programowania w Pythonie

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie Komputerów

WEJŚCIE/WYJŚCIE HASKELL ŁUKASZ PAWLAK DARIUSZ KRYSIAK

Wstęp do Programowania potok funkcyjny

Zatem w jaki sposób nasze programy mają komunikować się ze światem zewnętrznym?

SWIFT. Zaawansowane Programowanie Obiektowe

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Programowanie i projektowanie obiektowe

Haskell. Rozdział Ogólne informacje o języku

KOTLIN. Język programowania dla Androida

Ada 95 #1/5 - typy. Typy skalarne. Hierarchia typów w Adzie. Typ znakowy. Typy dyskretne. Plan wykładu

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Programowanie i struktury danych

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

ZMIENNE. Podstawy PHP

Microsoft IT Academy kurs programowania

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie C# mgr in. Dariusz Ku. p. 119A

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

λ parametry. wartość funkcji suma = λ x y. x + y kwadrat = λ x. x * x K.M. Ocetkiewicz, 2008 WETI, PG 2 K.M. Ocetkiewicz, 2008 WETI, PG 3

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Programowanie wspóªbie»ne

Mechanizmy refleksji w Javie i C# Autor: Aleksander Nałęczyński

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Składnia funkcji i Rekurencja w języku Haskell

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Przegląd języka Python. Łukasz Anwajler

Programowanie funkcyjne w Pythonie

Java Podstawy. Michał Bereta

Szablony funkcji i szablony klas

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

1 Klasy. 1.1 Denicja klasy. 1.2 Skªadniki klasy.

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

Oczywiście plik musi mieć rozszerzenie *.php

Model obiektu w JavaScript

Podstawowe części projektu w Javie

2 Przygotował: mgr inż. Maciej Lasota

Python wstęp do programowania dla użytkowników WCSS

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

HASKELL 2 R O Z D Z I A Ł 4 SKŁADNIA W FUNKCJACH R O Z D Z I A Ł 5 REKURENCJA. Learn You a Haskell for Great Good! Miran Lipovac

C++ wprowadzanie zmiennych

1 Podstawy c++ w pigułce.

wiczenie 1 Podstawy j zyka Java. Instrukcje warunkowe

Programowanie komputerowe. Zajęcia 4

Wstęp do Programowania potok funkcyjny

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Programowanie. Lista zadań nr 15. Na ćwiczenia 11, 19 i 23 czerwca 2008

PARADYGMATY I JĘZYKI PROGRAMOWANIA

Technologie cyfrowe semestr letni 2018/2019

Imi i nazwisko... Egzamin - Programowanie Obiektowe II rok informatyki, studia pierwszego stopnia, niestacjonarne Termin zerowy

Obiektowy Caml. Paweł Boguszewski

Dokªadna arytmetyka liczb rzeczywistych w j zyku Python

Wartości domyślne, szablony funkcji i klas

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Ćwiczenia z wyliczania wartości funkcji

Wstęp do programowania

Język ludzki kod maszynowy

Podstawy programowania funkcjonalnego

Leży u podstaw programowania funkcyjnego. Napisy. 1 Zastapienie dowolnego wyrażenia innym wyrażeniem o tej samej. wartości daje równoważny program.

Programowanie Funkcyjne WPPT Lista zadań

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

JAO - J zyki, Automaty i Obliczenia - Wykªad 1. JAO - J zyki, Automaty i Obliczenia - Wykªad 1

Technologie Informacyjne

CREATE TABLE logika (p BOOLEAN); INSERT INTO logika VALUES(true); INSERT INTO logika VALUES(false); INSERT INTO logika VALUES(NULL);

Platformy Programistyczne Podstawy języka Java

Wprowadzenie do języka Java

Transkrypt:

Paradygmaty programowania Haskell Piotr Matyasik AGH-UST 2014 Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 1 / 47 Historia A History of Haskell: Being Lazy With Class Paul Hudak (Yale), John Hughes (Chalmers), Simon Peyton Jones (MS Research), Philip Wadler (Edinburgh) Can programming be liberated from the von Neumann style? 1978 John Backus (nagroda Turinga) J zyki funkcyjne Miranda, Lazy ML, Orwell, Al, Id (dataow), Clean, Ponder, Daisy (Lisp, ML, Scheme) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 2 / 47

Dlaczego kolejny j zyk? W Javie mo»na napisa wszystko! bª dy wielko± kodu q s o r t 1 : : Ord a => [ a ] > [ a ] q s o r t 1 [ ] = [ ] q s o r t 1 ( p : x s ) = q s o r t 1 l e s s e r ++ [ p ] ++ q s o r t 1 g r e a t e r where l e s s e r = [ y y < xs, y < p ] g r e a t e r = [ y y < xs, y >= p ] Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 3 / 47 Haskell Haskell is lazy, Haskell is pure, Haskell has a (type) class. Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 4 / 47

Haskell w dziaªaniu ghci l e t a = min 5 [ ( a, b, c ) a< [ 1.. 1 0 0 ], b < [1..100], c < [1..100], c<a+b, a a+b b == c c ] (+) 2 2 (^) 3 3 Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 5 / 47 Typy Bool True, False && not and, or Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 6 / 47

Typy Int Integer Float Double Char Int - ograniczony (zale»y od architektury, zwykle 32 lub 64 bity ze znakiem) Integer - nieograniczony Float - zmiennoprzecinkowy pojedynczej precyzji Double - zmiennoprzecinkowy podwójnej precyzji Char - znak ('a') Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 7 / 47 Typy Porz dek Ordering, typ relacji,wyliczeniowy (f. compare) LT (less than - mniejszy ni») EQ (equal - równy) GT (greater than - wi kszy ni») Operatory == /= Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 8 / 47

Typy Listy listy musz skªada si z elementów tego samego typu [] - pusta lista [el 1, el 2, el 3,...] Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 9 / 47 Typy Listy enumeracje [el 1..el n ] enumeracje [el 1,..] enumeracje [el 1, el 2,.., el n ] ++ ª czenie list : konstrukcja listy!! indeksowanie.. zakres [1,2,3] == (:) 1 ((:) 2 ((:) 3 [])) (:) 0 [1,2,3] [5,3..( 1)] Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 10 / 47

Typy Listy Tekst head, tail, last, init [el 1, el 2, el 3,...] l r [ ] = [ ] l r x s = l a s t x s : l r ( i n i t x s ) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 11 / 47 Typy Listy x S, p(x) [x x S, px] (pochodz cy z, wzi ty z) p - stra»nik [m ++ " i " ++ k m< ["Adam", "Wacek" ], k< ["Anka", " Marta " ] ] s t r = [ s++[c ] s < "" : s t r, c < [ ' a '.. ' z ' ] ] Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 12 / 47

Typy Krotka odpowiednik struktury mo»e zawiera ró»ne typy elementów fst, snd (a trzeci?) (1,2,3) ('a ',1,[]) (([1,2,3],' a '),( sadasdad,[]),([])) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 13 / 47 Przerwa Rozrywka Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 14 / 47

Typy Jeszcze raz od pocz tku! nazwy zawsze zaczynaj si du» liter WSZYSTKO ma swój typ! ( : ) : : a > [ a ] > [ a ] head : : [ a ] > a t a i l : : [ a ] > [ a ] length : : [ a ] > I n t co to jest a? Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 15 / 47 Typy Klasy Ord - porz dek zupeªny Show - mo»liwe do wy±wietlenia jako napis Read - mo»liwe do stworzenia z napisu Enum - enumerowalne Bounded - ograniczone Num - liczbowy Eq - porównywalne Integral - caªkowite Floating - zmiennoprzecinkowe Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 16 / 47

Currying Funkcje maj tylko jeden argument take : : I n t > [ a ] > [ a ] z i p : : [ a ] > [ b ] > [ ( a, b ) ] f o l d l : : ( a > b > a ) > a > [ b ] > a map : : ( a > b ) > [ a ] > [ b ] take : : I n t > [ a ] > [ a ] z i p : : [ a ] > [ b ] > [ ( a, b ) ] f o l d l : : ( a > b > a ) > a > ( [ b ] > a ) map : : ( a > b ) > [ a ] > [ b ] Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 17 / 47 Funkcje Dopasowanie wzorca wzorce s dopasowywane od pierwszego do ostatniego (góra-dóª, lewo-prawo) tylko pierwszy pasuj cy jest wykonywany wzorce musz obejmowa caª domen Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 18 / 47

Funkcje Dopasowanie wzorca f a c 0 = 1 f a c n = n f a c ( n 1) 1 mmax [ ] = e r r o r " p u s t a l i s t a " 2 mmax [ x ] = x 3 mmax ( x : x s ) 4 x > mmax x s = x 5 otherwise = mmax x s Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 19 / 47 Funkcje Guards! Where? sqreq a b c d e l t a > 0 = [ x1, x2 ] d e l t a == 0 = [ x1 ] otherwise = [ ] where x1 = ( b s q d e l t a ) / ( 2 a ) x2 = ( b + s q d e l t a ) / ( 2 a ) s q d e l t a = s q r t d e l t a d e l t a = b b 4 a c Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 20 / 47

Funkcje let (me) in case sqreq ' a b c = l e t d e l t a = b b 4 a c s q d e l t a = s q r t d e l t a x1 = ( b s q d e l t a ) / ( 2 a ) x2 = ( b + s q d e l t a ) / ( 2 a ) i n case compare d e l t a 0 of GT > [ x1, x2 ] EQ > [ x1 ] LT > [ ] Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 21 / 47 Notacja Lambda Funkcja na szybko \ x y z > \ x > (\ y > (\ z >... ) ) f x y z =... f = \ x > (\ y > (\ z >... ) ) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 22 / 47

Pointfreee Gdzie si podziaªy nazwy parametrów!? num_of_occ e l e l i s t = length ( f i l t e r (== e l e ) l i s t ) num_of_occ = ( length. ). f i l t e r. (==) η redukcja square ' ' x = (^2) x square ' ' ' = (^2) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 23 / 47 dolar i spacja f g h x (((f g)h)x) f g $ h x f g (h x) (f g)(h x) f $ g h x f(g h x) f((g h)x) f $ g $h x f(g(h x)) (f.g)x f(g x) (f.g.h)x f(g(h x)) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 24 / 47

Typy danych Deniowanie typów wyliczeniowych data Mob = Chicken Cow Horse Pig Sheep V i l l a g e r S k e l e t o n C r e e p e r Zombie d e r i v i n g (Show, Eq) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 25 / 47 Typy danych Deniowanie i s H o s t i l e : : Mob > Bool i s H o s t i l e Zombie = True i s H o s t i l e S k e l e t o n = True i s H o s t i l e C r e e p e r = True i s H o s t i l e _ = False Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 26 / 47

Typy danych Deniowanie typów z parametrami data M i n e c r a f t F i g u r e = P l a y e r String Mob String d e r i v i n g Show Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 27 / 47 Typy danych Deniowanie type I d = String data M i n e c r a f t F i g u r e = P l a y e r I d Mob I d d e r i v i n g Show Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 28 / 47

Typy danych Deniowanie data Person = Person String String I n t d e r i v i n g Show type A d d r e s s = String type Name = String type Age = I n t data Person = Person Name A d d r e s s Age Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 29 / 47 Typy danych Deniowanie data MTree a = N u l l Node a ( MTree a ) ( MTree a ) d e r i v i n g (Show, Eq, Ord) data XTree a = L e a f a Branch ( XTree a ) ( XTree a ) d e r i v i n g (Eq, Ord, Show) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 30 / 47

Typy danych Sprytny konstruktor jak zapobiec nadawaniu bezsensownych warto±ci? data B a t e r i a p = B a t e r i a p d e r i v i n g (Show, Eq, Ord) type Poj = I n t data B a t e r i a p = B a t e r i a Poj d e r i v i n g (Show, Eq, Ord) B a t e r i a ( 10)????? Funkcja konstruuj ca makebatt p p>= 0 && p<100000 = B a t e r i a p o t h e r w i s e = e r r o r " N i e w l a s c i w a pojemnosc " Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 31 / 47 Typy danych instancja Show i n s t a n c e Show ( B a t e r i a a ) where show ( B a t e r i a p ) p>1000 = " B a t e r i a o p o j e m n o s c i " ++ ( show $ ( f r o m I n t e g r a l p ) / 1 0 0 0. 0 ) ++ "Ah" o t h e r w i s e = " B a t e r i a o p o j e m n o s c i " ++ ( show p ) ++ "mah" Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 32 / 47

Typy danych Notacja rekordowa data Punkt p = Punkt { x : : p, y : : p} d e r i v i n g (Show, Eq, Ord) x : : Punkt p > p y : : Punkt p > p Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 33 / 47 Kompozycja f :: a b f :: a (String, b) Jak poª czy funkcje typu f'? Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 34 / 47

Rozwi zanie s k l e j ( s, a ) f = ( s++w, q ) where (w, q ) = f a s k l e j ' ( s, a ) f = ( s ++ f s t ( f a ), snd ( f a ) ) n i c f = ( "", f ) l i f t f = n i c. f f x = 2 x f ' x = ( "mnoze " ++ ( show x ) ++ " p r z e z dwa", f x ) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 35 / 47 Monada Denicja -koniec z udawaniem,»e nikt nie rozumie monad data Deb a = Deb String a d e r i v i n g (Show, Eq, Ord) instance Monad Deb where return f = Deb "" f (>>=) ( Deb s v ) f = Deb ( s++w) a where ( Deb w a ) = f v f x = Deb "Odpalam f " (2 x ) g x = Deb "Odpalam g" (2+x ) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 36 / 47

Monada Ale to w sumie takie niepraktyczne, jak to rozró»ni? data Deb a = Deb [ String ] a d e r i v i n g (Show, Eq,Ord) instance Monad Deb where return f = Deb [ "" ] f (>>=) ( Deb s v ) f = Deb ( s++w) a where ( Deb w a ) = f v f x = Deb [ "Odpalam f na " ++ show x ] (2 x ) g x = Deb [ " Odpalam g na " ++ show x ] (2+ x ) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 37 / 47 Monada GENIALNE!! - dziwne,»e nikt na to nie wpadª wcze±niej import Control.Monad.Writer Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 38 / 47

Monada jako pojemnik return :: (Monad m) a m a - zapakuj zwykªy element fmap :: (F unctor f) (a b) f a f b - zmie«pudeªko a na pudeªko b join :: (Monad m) m (m a) m a - przepakuj w jedno pudeªko (>>=) :: (Monad m) m a (a m b) m b - bind (posuwaj) xs >>= f = join (fmap f xs) i n s t a n c e Monad [ ] where r e t u r n x = [ x ] x s >>= f = c o n c a t (map f x s ) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 39 / 47 Monada jako proces obliczeniowy M a - proces obliczeniowy daj cy w wyniku a return :: (Monad m) a m a - proces obliczeniowy, który nic nie robi (>>) :: (Monad m) m a m b m b - dwa procesy obliczeniowe a i b, uruchamiany jest proces a, pomija si jego wynik, a nast pnie uruchamiany jest proces b, który zwraca wynik (>>=) :: (Monad m) m a (a m b) m b - proces obliczeniowy a i funkcja, która na podstawie wyników pierwszego procesu obliczeniowego okre±la kolejny proces obliczeniowy Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 40 / 47

do notacja do do { x } = x do { x ; <stms> } = x >> do { <stms> } do { v < x ; <stms> } = x >>= \ v > do { <stms> } do { l e t <decs> ; <stms> } = l e t <decs> i n do { <stms> } Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 41 / 47 Monada Prawa - nr 1 return v >>= f == f v do w < return v f w = do f v Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 42 / 47

Monada Prawa - nr 2 x >>= return == x do = do v < x return x v Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 43 / 47 Monada Prawa - nr 3 ( x >>= f ) >>= g == x >>= (\ v > f v >>= g ) do w < do g w = do v < x w < f g w v v < x f v Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 44 / 47

Monada Prawa s k l e j ' ( s, a ) f = ( s ++ f s t ( f a ), snd ( f a ) ) s k l e j ' x f = ( f s t x ++ f s t ( f ( snd x ) ), snd ( f ( snd x ) ) ) n i c f = ( " p a k u j e f ", f ) return v >>= f == f v x >>= return == x ( x >>= f ) >>= g == x >>= (\ v > f v >>= g ) Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 45 / 47 Funktor Funktor Funktor to odwzorowanie jednej kategorii w drug zachowuj ce zªo»enia i morzmy to»samo±ciowe. c l a s s Functor f where fmap : : ( a > b ) > f a > f b Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 46 / 47

Control.Monad Po co to wzystko - odpowied¹? mapm :: Monad m (a m b) [a] m [b] sequence :: Monad m [m a] m [a] (=<<) :: Monad m (a m b) m a m b (>=>) :: Monad m (a m b) (b m c) a m c (<=<) :: Monad m (b m c) (a m b) a m c Piotr Matyasik (AGH-UST) Paradygmaty programowania 2014 47 / 47