1 / 19

Haskell :: Funções como valores

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). Composição de funções. Estruturar programas compondo funções type Word = String

lydia
Download Presentation

Haskell :: Funções como valores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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) f . g v t u g f g >.> f

  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 • 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)) comp2 x f g g (f x) (f y) y f \x y -> g (f x) (f y)

  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) -> Intg 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. 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 Sintaxe Abstrata de Exp1

  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) ...

More Related