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

Slides:



Advertisements
Apresentações semelhantes
Input/Output em Haskell
Advertisements

Introdução à Programação Engenharia da Computação
Tópicos em Compiladores
Compiladores Claudio Benossi
Programação Funcional
I - Noções dum compilador
Compiladores I Cristiano Damiani Vasconcellos
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Pearson Education Slide 1. Pearson Education Slide 2 Capítulo 2 Criado por Frederick H. Colclough, Colorado Technical University Fluxo de Controle.
Elsa Carvalho 49 Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Ivan Saraiva Silva Aula 1 - Álgebra Booleana
Uma linguagem de programação para o ambiente Virtuosi
Prof. Heloise Manica Paris Teixeira
LIFE: integração de predicados, funções e classes
LINGUAGEM C.
Rafael Pinto Frederico Corrêa
Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Verificação de Tipos.
Introdução ao -calculus
Linguagem C Estruturas de Seleção.
Linguagem OperOR Agenda Descrição da Linguagem Funcionalidades BNF Limitações e Dificuldades Desenvolvimento Exemplos Dificuldades.
Minimização de Circuitos Lógicos
CAPÍTULO 05 Listas.
Implementar Listas em Linguagem Funcional II
Aula prática - análise contextual
Definição de tipos - LF3Definição de tipos - LF3 PLP - Apresentação 1.
Conceitos de Lógica Digital
Haskell Programação Funcional
©André Santos, Programação Funcional Generalizações André Santos.
Estudo dos Conceitos e Paradigmas de Programação
©André Santos, Programação Funcional Classes em Haskell André Santos.
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Paradigma Funcional Apresentação de LF1.
Linguagem de Expressões 2
© André Santos Programação Funcional Listas André Santos.
1 PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins.
Programação em C++ Compiladores
23/08/2004 Centro de Informática - UFPE Projeto 2 de PLP Equipe: Daniel Leitão (dal) Dante Torres (dgt) Pablo Sampaio (pas) Linguagem Imperativa 2 com.
Algumas notas sobre a linguagem de programação C
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
Melhorias e Mensagens Amigáveis ao Usuário Centro de Informática Universidade Federal de Pernambuco Bruno Felipe Marco André Paulo Fernando Rodolfo Santos.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
Programação Funcional
Lambda Cálculo & Programação Funcional
Programação Declarativa 1 OPERADORES TIPOS DE NOTAÇÃO PARA OS OPERADORES onde  x representa um argumento cuja precedência é estritamente menor do que.
George Darmiton da Cunha Cavalcanti
Linguagens Funcionais: Haskell Prática 1 Paradigmas de Linguagens Computacionais Monitor: Guilherme Moura
Generalizações: Map, Fold, Filter, e Composição ©André Santos e Marcelo d’Amorim 2010.
Programação Funcional > FUNÇÕES COMO VALORES Monitor: Guilherme Moura Paradigmas de Linguagens Computacionais.
Funções como Valor ©André Santos e Marcelo d’Amorim.
Semântica Denotacional Semântica para Funções Centro de Informática, UFPE Recife, Brasil.
Haskell Programação Funcional Diego Lima Rubem Moreira.
©André Santos, Programação Funcional Tipos Algébricos André Santos.
©André Santos, Programação Funcional Tipos Abstratos de Dados André Santos.
PLP – Paradigma de Linguagens de Programação
JavaCC.
©André Santos, Programação Funcional Funções como valores André Santos.
Haskell Programação Funcional Diego Lima Rubem Moreira.
Emanuella Aleixo ( José Antônio Juliana Mafra Marcela Balbino
PARADIGMAS DE LINGUAGENS EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
Tipos de Dados, Variáveis, Expressões Lógicas e Aritméticas
1 CIn / UFPE Algoritmos de Parsing Gustavo Carvalho Março 2011.
Álgebra de Boole Circuitos Digitais
Haskell (é uma função polimorfica) Laboratório Rafael Borges
VARIÁVEIS Desenvolvido pelo Mestrando Rodrigo Moreira Barreto – VHLab (Virtual Humans Simulation Laboratory – PUCRS) 1 Desenvolvido por: Rodrigo Moreira.
Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe :Ana Paula Cavalcanti (apcc2) Clélio Feitosa (cfs) Zildomar C.
1 Programação Multi-Paradigma Cristiano Bertolini – Ellison Siqueira – Guilherme Avelino –
Variáveis, expressões e comandos Dilvan Moreira. Lembrando …  Instalação normal (para utilizar no PC com Windows) 
1 CIn / UFPE Introdução a Parsing Gustavo Carvalho Abril 2015.
Aula 2 Professores: Conteúdo: Dante Corbucci Filho
Transcrição da apresentação:

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

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

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

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

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

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

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

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

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

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

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

Haskell :: Um Interpretador para Exp1 George Darmiton da Cunha Cavalcanti Monitores: Bruno Barros cin.ufpe.br) Glerter Sabiá cin.ufpe.br) Thiago Lacerda cin.ufpe.br)

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

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

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

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

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

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)

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