Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Funkcionalno programiranje

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Funkcionalno programiranje"— Μεταγράφημα παρουσίασης:

1 Funkcionalno programiranje
Funkcionalni parseri Interaktivni programi

2 Šta je parser? Parser je program koji analizira tekst kako bi odredio njegovu sintaktičku strukturu: 4 + 2 3 23+4

3 Razni programi koje svakodnevno koristimo imaju neke vrste parsera kojima preprocesiraju svoje ulazne podatke: Haskell programs Shell scripts HTML documents Hugs Unix Explorer

4 Parser je funkcija koja uzima string i vraća neki oblik drveta
Tip parsera U Haskelu, parsere možemo prirodno posmatrati kao funkcije: type Parser = String  Tree Parser je funkcija koja uzima string i vraća neki oblik drveta

5 Međutim, parser možda neće iskoristiti čitav string, pa u povratnu vrednost dodajemo i taj neiskorišćeni deo: type Parser = String  (Tree,String) String se može parsirati na više načina, a nekad se i ne može parsirati, pa je pogodno vratiti listu rezultata: type Parser = String  [(Tree,String)]

6 Da se ne bi ograničavali samo na strukuturu drveta, generalizujemo tip parsera tako da povratna vrednost bude bilo kog tipa: type Parser a = String  [(a,String)]

7 Deklaracija klasi i instanci u Haskelu
Uvođenje novih klasa: class Eq a where (==), (\=) :: a → a → Bool x \= y = ¬(x == y)

8 Uvođenje instanci klasa:
instance Eq Bool where False == False = True True == True = True _==_ = False

9 Monadički tipovi class Monad m where return :: a → m a
(>>=) :: m a → (a → m b) → m b

10 Primer instance monade
instance Monad Parser where return v = · · · p >>= f = · · ·

11 Notacija do do v1 ← e1 e1 >>= λv1 → v2 ← e2 e2 >>= λv2 →
... vn ← en return (f v1 v2 ... vn) e1 >>= λv1 → e2 >>= λv2 → ... en >>= λvn → return (f v1 v2 ... vn)

12 Primer parser.hs

13 Izgradnja gramatike za parser za aritmetičke izraze
Hoćemo da konstruišemo parser koji bi izračunavao vrednost aritmetičkog izraza: 2*3+4 10 2*(3+4) 14 2 * 3 + 4

14 Instanca 1 expr ::= expr + expr | expr ∗ expr | (expr) | nat

15 Za izraz 2*3+4 imamo dva moguća drveta
izvođenja, jer naša gramatika ne uzima u obzir da množenje ima veći prioritet od sabiranja

16 Instanca 2 expr ::= expr + expr | term term ::= term ∗ term | factor
factor ::= (expr) | nat nat ::= 0 | 1 | 2 | · · · U ovakvoj gramatici postoji jedinstveno drvo izvođenja za 2*3+4

17 Međutim, gramatika još uvek ne uzima u obzir da su množenje i deljenje asocijativne operacije, što prouzrokuje više mogućih drveta izvođenja npr za izraz 2+3+4, koji može biti protumačen kao (2+3)+4 i kao 2+(3+4)

18 Instanca 3 expr ::= term + expr | term term ::= factor ∗ term | factor
što se može dalje pojednostaviti radi lakše implementacije: expr ::= term (+ expr |epsilon ) term ::= factor (∗ term |epsilon)

19 Primer arexp.hs

20 Zadatak Proširiti gramatiku i parser tako da se omogući stepenovanje. Podrazumeva se da je stepenovanje desno asocijativno i da ima veći prioritet od množenja i deljenja, ali manji od zagrada i brojeva.

21 Interaktivni programi
Do sada smo videli kako se u Haskelu pišu tzv. batch programi, koji uzimaju ulazne podatke na početku i daju izlazne na kraju, bez ikakvih sporednih efekata batch program inputs outputs

22 Međutim, želeli bismo da koristimo Haskel za pisanje interaktivnih programa koji u toku izvršavanja mogu čitati podatke sa ulaza i pisati na izlaz interactive program inputs outputs keyboard screen

23 Problem Haskel programi nemaju sporedne efekte.
Haskel programi su čiste matematičke funkcije: Haskel programi nemaju sporedne efekte. Čitanje sa tastature i ispis na ekran su sporedni efekti: Interaktivni programi imaju sporedne efekte.

24 Tip akcija koje vraćaju vrednost tipa a
Rešenje Interaktivni programi se mogu pisati u Haskelu korišćenjem tipova koji bi razlikovali “čiste” izraze od “nečistih” akcija koje mogu obuhvatati sporedne efekte IO a Tip akcija koje vraćaju vrednost tipa a

25 Tip akcija koje vraćaju karakter.
Na primer: IO Char Tip akcija koje vraćaju karakter. Tip akcija koje obuhvataju samo sporedne efekte i nemaju povratnu vrednost IO () Napomena: () je tip torke koja sadrži 0 komponenata.

26 Primer io.hs


Κατέβασμα ppt "Funkcionalno programiranje"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google