Haskell Programação Funcional

Slides:



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

Python: Recursão Claudio Esperança.
Haskell The Craft of Functional Programming Simom Thompson Capítulo 14
Input/Output em Haskell
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
BCC101 – Matemática Discreta
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Recursividade Conceitos e Aplicações.
Rafael Pinto Frederico Corrêa
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Instrutor: Nilo Menezes
Robson Godoi / Sandra Siebra
Estruturas de Decisão Permitir testes para decidir acções alternativas: if if - else switch (?:) Operador Condicional MF.
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.
Análise Semântica e Representação Intermédia
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Exercicios de revisão Exercicio tirados de
Tipos Abstratos de Dados
Heap Sort TPA – Prof. Mateus Costa
Listas: Haskell x Prolog
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.
Indução Matemática Recursão
Linguagem de Programação JAVA
Pilhas Profa. Nádia Félix.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Analise sintática aula-07-analise-sintática.pdf.
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;
Estruturas de Dados Aula 17: Estruturas Genéricas
Estruturas de Dados Aula 15: Árvores
Funções Matemáticas e de String
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
Programação Funcional
Resolução de Problemas de Busca
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.
Recursividade Profs. De Prog2 e Lab2.
INE Fundamentos de Matemática Discreta para a Computação
PLP – Paradigma de Linguagens de Programação
©André Santos, Programação Funcional Funções como valores André Santos.
Haskell Programação Funcional Diego Lima Rubem Moreira.
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.
Estrutura de dados Pilhas e filas
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.
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 Marcelo Costa

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 myZip :: [t] -> [u] -> [(t,u)] 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 Operador concatenação de lista myLength :: [t] -> Int Operador concatenação de lista (&&&) :: [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 dropSpace :: String -> String getWord :: String -> String dropWord :: String -> String splitWord :: String -> [String]