Haskell Programação Funcional Diego Lima Rubem Moreira.

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

Programação Funcional
Python: Recursão Claudio Esperança.
Python: Listas Claudio Esperança.
Haskell The Craft of Functional Programming Simom Thompson Capítulo 14
Input/Output em Haskell
Centro Integrado de Tecnologia da Informação
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Programação Funcional
Recursividade Prof. Rosana Palazon.
Listas encadeadas Prof. Rosana Palazon.
Listas duplamente encadeadas
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)
Programando com Alice Tim Margush Department of Computer Science University of Akron © 2006.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
BCC101 – Matemática Discreta
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Rafael Pinto Frederico Corrêa
Instrutor: Nilo Menezes
Apresentação da linguagem Python
P YTHON : T IPO L ISTA George Gomes Cabral. L ISTAS São arranjos seqüenciais de informações mais simples Caracterizam-se por permitir o acesso eficiente.
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
João Lucas de Oliveira Torres
CAPÍTULO 05 Listas.
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Exercicios de revisão Exercicio tirados de
Listas: Haskell x Prolog
Programação Funcional
Haskell Programação Funcional
©André Santos, Programação Funcional Generalizações André Santos.
©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:
Centro de Informática – UFPE
© André Santos Programação Funcional Listas André Santos.
Linguagem de Programação JAVA
Orientação a Objetos e Java Graduação em Ciência da Computação
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Aula Prática 1 Monitoria IP/CC (~if669). Verificação Dinâmica de Tipos Métodos de superclasses e subclasses: Uso de métodos de subclasses quando se é.
Aula prática 7 Strings Monitoria de Introdução à Programação
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Estruturas de Dados Aula 17: Estruturas Genéricas
Funções Matemáticas e de String
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Programação Funcional
Programação I Aula 4 (Expressões Booleanas e Expressões de Seleção) Prof. Gilberto Irajá Müller Última atualização 17/3/2009.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
George Darmiton da Cunha Cavalcanti
Generalizações: Map, Fold, Filter, e Composição ©André Santos e Marcelo d’Amorim 2010.
Funções como Valor ©André Santos e Marcelo d’Amorim.
Haskell Programação Funcional Diego Lima Rubem Moreira.
INE Fundamentos de Matemática Discreta para a Computação
©André Santos, Programação Funcional Tipos Algébricos André Santos.
Linguagem de Programação
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
PLP – Paradigma de Linguagens de Programação
BCC101 – Matemática Discreta
Programação Funcional 4a. Seção de Slides Tuplas e Definição de Funções Locais em Haskell.
 O que são arrays:  estruturas de dados homogêneas  coleção de elementos do mesmo tipo referenciada por um nome comum  um array pode ser imaginado.
Haskell (é uma função polimorfica) Laboratório Rafael Borges
©André Santos, Programação Funcional André Santos.
Revisão Turma – WEB JavaScript.
Aula Prática 5 Recursão Monitoria  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim.
Algoritmos de Pesquisa
Prof. Tertuliano Operadores Variáveis em C++.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
© André Santos e Marcelo d'Amorim
Transcrição da apresentação:

Haskell Programação Funcional Diego Lima Rubem Moreira

Funções - Recursão Problema: somar os elementos de uma lista – sumList :: [Int] -> Int Solução: Recursão – caso base: lista vazia [] sumList [] = 0 – caso recursivo: lista tem cabeça e cauda sumList (a:as) = a + sumList as

Funções - Recursão sumList [2,3,4,5] = 2 + sumList [3,4,5] = 2 + (3 + sumList [4,5]) = 2 + (3 + (4 + sumList [5])) = 2 + (3 + (4 + (5 + sumList []))) = 2 + (3 + (4 + (5 + 0))) = 14

Exemplo Obter os n primeiros elementos de uma lista – primeirosN :: [Int] -> Int -> [Int] Verificar se um elemento pertence a lista – pertence :: Int -> [Int] -> Bool

Exemplo filtragem: apenas os números de uma string – digits :: String -> String soma de uma lista de pares – sumPairs :: [(Int,Int)]->[Int]

Exemplo SORT Insere um elemento na lista verificando se [e menor que o próximo. – ins :: Int -> [Int] -> [Int] Ordena uma lista de Int iSort :: [Int] -> [Int]

Polimorfismo Funções que recebem um tipo genérico Mesma definição usada para vários tipos myZip :: [t] -> [u] -> [(t,u)] myZip (a:as) (b:bs) = (a,b):zip as bs myZip [] [] = []

Exemplo Função myLength – myLength :: [t] -> Int Operador concatenação se iguais (lista) – (&&&) :: [t] -> [t] -> [t]

Polimorfismo Utilização das classes Eq (igualdade entre tipos genéricos) e Ord (comparação entre tipos genéricos) pertence :: Eq t => t -> [t] -> Bool maior :: Ord t => [t] -> t

Definições Locais Resolução bottom-up e top-down sumQuadrados :: Int -> Int -> Int sumQuadrados a b = sqA + sqB where sqA = a * a sqB = b * b sumQuadrados a b = sq a + sq b where sq x = x * x

Definições Locais Resolução bottom-up e top-down sumQuadrados :: Int -> Int -> Int sumQuadrados a b = let sqA = a*a sqB = b*b in sqA + sqB sumQuadrados a b = let sq z = z*z in sq a + sq b

CASE firstDigit :: String -> Char firstDigit st = case (digits st) of [] -> '\0' (a:as) -> a

IF THEN ELSE ehStringTal :: String -> Int -> Bool ehStringTal str a = if str == "oi" then True else if str == "joao" then if a == 3 then False else True else False

EXERCICIOS maior: recebe uma lista de números e retorna o maior. obs.: não usar a função max – maior :: [Int] -> Int gera_sequencia: recebe um número inteiro n positivo e retorna a lista [1, -1, 2, -2, 3, -3,... n, -n] – gera_sequencia :: Int -> [Int]

EXERCICIOS rodar_esquerda: recebe um número natural, uma lista e retorna uma nova lista onde a posição dos elementos mudou como se eles tivessem sido "rodados” ex.: (rodar_esquerda 0 '(a s d f g)) ==> (a s d f g) (rodar_esquerda 1 '(a s d f g)) ==> (s d f g a) (rodar_esquerda 3 '(a s d f g)) ==> (f g a s d) (rodar_esquerda 4 '(a s d f g)) ==> (g a s d f)

EXERCICIOS