A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Haskell :: Funções como valores George Darmiton da Cunha Cavalcanti Monitores: Bruno Barros cin.ufpe.br) Glerter Sabiá (gas2.

Apresentações semelhantes


Apresentação em tema: "Haskell :: Funções como valores George Darmiton da Cunha Cavalcanti Monitores: Bruno Barros cin.ufpe.br) Glerter Sabiá (gas2."— Transcrição da apresentação:

1 Haskell :: Funções como valores George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Monitores: Bruno Barros (blbs @ cin.ufpe.br) Glerter Sabiá (gas2 @ cin.ufpe.br) Thiago Lacerda (tbl2 @ cin.ufpe.br)

2 Composição de funções  Estruturar programas compondo funções type Word = String type Line = [Word] fill :: String -> [Line] fill st = splitLines (splitWords st) splitWords :: String -> [Word] splitLines :: [Word] -> [Line] fill = splitLines. splitWords

3 A função de composição  (f. g) x = f (g x) u v gf g >.> f t f. g

4 A função de composição (.) :: (u -> v) -> (t -> u) -> (t -> v) (.) f g x = f (g x)  a composição é associativa

5 Composição para a frente (>.>) :: (t -> u) -> (u -> v) -> (t -> v) g >.> f = f. g (g >.> f) x = (f. g) x = f (g x) fill = splitWords >.> splitLines

6 Resultados twice :: (t -> t) -> (t -> t) twice f = f. f (twice succ) 12 = (succ. succ) 12 = succ (succ 12) = 14

7 Resultados twice  Generalizar twice passando um argumento que diz o número de vezes que a função-argumento será composta com ela mesma: iter :: Int -> (t -> t) -> (t -> t) iter 0 f = id iter n f = f >.> iter (n-1) f

8 Expressões que definem funções listMult :: Int -> (Int -> [Int]) listMult n = f where f m = [m*1,m*2..,m*n]  Notação Lambda (\m -> 3+m) addNum n = (\m -> [m*1,m*2..m*n])

9 comp2 :: (t -> u) -> (u -> u -> v) -> (t -> t -> v) comp2 f g = (\x y -> g (f x) (f y)) \x y -> g (f x) (f y) y f f g g (f x) (f y) comp2 x

10 Associatividade  f a b = (f a) b  f a b  f (a b)  t -> u -> v = t -> (u -> v)  t -> u -> v  (t -> u) -> v  g :: (Int -> Int) -> Int g h = h 0 + h 1

11 Currying (currificação) curry :: ((t,u) -> v) -> (t -> u -> v) curry g a b = g (a,b) uncurry :: (t -> u -> v) -> ((t,u) -> v) uncurry f (a,b) = f a b flip :: (t -> u -> v) -> (u -> t -> v) flip f b a = f a b

12 Haskell :: Um Interpretador para Exp1 George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Monitores: Bruno Barros (blbs @ cin.ufpe.br) Glerter Sabiá (gas2 @ cin.ufpe.br) Thiago Lacerda (tbl2 @ cin.ufpe.br)

13 Linguagem Exp1  Inclui apenas valores constantes (literais) e operações sobre valores  Valores e operações sobre inteiros, booleanos e string são admitidos  Um programa é uma expressão  Agrupa valores em tipos e uma verificação de tipos pode ser implementada

14 Sintaxe Abstrata de Exp1 Programa ::= Expressao Expressao ::= Valor | ExpUnaria | ExpBinaria Valor ::= ValorConcreto ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao

15 Programas de Exp1  Programa 1 4  Programa 2 4 + 5  Programa 3 (5+(-2))-3

16 Sintaxe Abstrata de Exp1 data Programa = PROG Expressao data Expressao = LIT Valor -- ExpUnaria | MINUS Expressao | NOT Expressao | LENGTH Expressao -- ExpBinaria | SOMA Expressao Expressao | SUBTRACAO Expressao Expressao | AND Expressao Expressao | OR Expressao Expressao | IGUAL Expressao Expressao | CONCATENA Expressao Expressao

17 Exemplos de programas Exp1 p1 = PROG (LIT (V_INT 4)) p2 = PROG (SOMA (LIT (V_INT 4)) (LIT (V_INT 5)))...

18 Entidades Semânticas  Valores data Valor = V_INT Int | V_BOOL Bool | V_STR String instance Show Valor where show (V_INT int) = (show int) show (V_BOOL bool) = (show bool) show (V_STR str) = (show str)

19 Função de Interpretação interprete :: Programa -> String interprete (PROG e) = show (eval e) -- Funcao de Avaliacao de Expressoes eval :: Expressao -> Valor eval (LIT i) = i eval (NOT e) = not (eval e) eval (SOMA e1 e2) = (eval e1) + (eval e2)...


Carregar ppt "Haskell :: Funções como valores George Darmiton da Cunha Cavalcanti Monitores: Bruno Barros cin.ufpe.br) Glerter Sabiá (gas2."

Apresentações semelhantes


Anúncios Google