© André Santos 1996-2002 Programação Funcional Listas André Santos.

Slides:



Advertisements
Apresentações semelhantes
Programação Funcional
Advertisements

Programação Funcional
Departamento de Informática Universidade Federal do Espírito Santo
Introdução à Programação: uma Abordagem Funcional Programação I Eng. de Computação Prof.ª Claudia Boeres e Prof. Estefhan Dazzi 2010/1.
Curso de aprofundamento na linguagem C
Haskell The Craft of Functional Programming Simom Thompson Capítulo 14
Input/Output em Haskell
Soluções Iterativas com Laços
Um programa em C Bibliotecas Variáveis globais
Programação Funcional
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Departamento de Informática Universidade Federal do Espírito Santo
Recursividade Prof. Rosana Palazon.
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)
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
BCC101 – Matemática Discreta
Rafael Pinto Frederico Corrêa
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
7 Abstração Genérica Unidades genéricas e instanciação.
8 Sistemas de Tipos Polimorfismo de inclusão.
Instrutor: Nilo Menezes
Revisão da Linguagem C.
Estrutura de Dados em Java
Banco de dados Profª Kelly Medeiros.
Linguagem Haskell Riocemar S. de Santana.
Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C
CAPÍTULO 05 Listas.
Introdução a Computação e Cálculo Numérico
Vetores em c / c++: Formato geral para declaração de variáveis:
DEFINIÇÃO DE TIPOS – LF3 PLP – Apresentação 2. Equipe Felype Santiago Maria Carolina Paola Rodrigues Rodrigo Cardoso.
Exercicios de revisão Exercicio tirados de
Listas: Haskell x Prolog
Programação II Estruturas de Dados Aula 02 - continuação
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:
Paradigma Funcional Apresentação de LF1.
Programação em C++ Compiladores
Elsa Carvalho 72 Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Haskell :: Funções como valores George Darmiton da Cunha Cavalcanti Monitores: Bruno Barros cin.ufpe.br) Glerter Sabiá (gas2.
Elsa Carvalho 18 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Estruturas de.
94 Elsa Carvalho Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Programação Funcional
Tipos de dados inteiro caracter real logico
Lista Linear Base para outras estruturas
George Darmiton da Cunha Cavalcanti
Linguagens Funcionais: Haskell Prática 1 Paradigmas de Linguagens Computacionais Monitor: Guilherme Moura
Metaprogramação Estática André Knabben Pricilla Padaratz.
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.
Haskell Programação Funcional Diego Lima Rubem Moreira.
©André Santos, Programação Funcional Tipos Algébricos André Santos.
©André Santos, Programação Funcional Provas de Propriedades de Programas André Santos.
©André Santos, Programação Funcional Tipos Abstratos de Dados André Santos.
©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.
Haskell (é uma função polimorfica) Laboratório Rafael Borges
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 02 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
©André Santos, Programação Funcional Laziness / Provas de Propriedades André Santos.
©André Santos, Programação Funcional André Santos.
Funções Recursivas Leonardo Lucena – IFRN, 2011 Adaptação das Transparências de Graham Hutton (
Anderson Braga de Avila 1.  Usar todos os recursos computacionais no sistema — CPUs, GPUs e outros processadores  Modelo de programação paralela eficiente.
Funções de Alta Ordem Leonardo Lucena – IFRN, 2011 Adaptação das Transparências de Graham Hutton (
© André Santos e Marcelo d'Amorim
Programação Funcional
Transcrição da apresentação:

© André Santos Programação Funcional Listas André Santos

© André Santos Listas Coleções de objetos de um mesmo tipo. Exemplos: [1,2,3,4] :: [Int] [True] :: [Bool] [(5,True),(7,True)] :: [(Int,Bool)] [[4,2],[3,7,7,1],[],[9]] :: [[Int]] [’b’,’o’,’m’] :: [Char] ”bom” :: [Char] Sinônimos de tipos: type String = [Char] [] é uma lista de qualquer tipo.

© André Santos Listas vs. Conjuntos A ordem dos elementos é significante [1,2] /= [2,1] assim como “sergio” /= “oigres” O número de elementos também importa [True,True] /= [True]

© André Santos O construtor de listas (:) outra forma de escrever listas: [5] é o mesmo que 5:[] [4,5] é o mesmo que 4:(5:[]) [2,3,4,5] é o mesmo que 2:3:4:5:[] (:) é um construtor polimórfico: (:) :: Int -> [Int] -> [Int] (:) :: Bool -> [Bool] -> [Bool] (:) :: t -> [t] -> [t]

© André Santos Listas [2..7] = [2,3,4,5,6,7] [-1..3] = [-1,0,1,2,3] [ ] = [2.8,3.8,4.8] [7,5..0] = [7,5,3,1] [2.8, ] = [2.8,3.3,3.8,4.3,4.8]

© André Santos Exercícios Quantos itens existem nas seguintes listas? [2,3] [[2,3]] Qual o tipo de [[2,3]] ? Qual o resultado da avaliação de [2,4..9] [2..2] [2,7..4] [10,9..1] [10..1]

© André Santos Funções sobre listas 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

© André Santos Avaliando 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

© André Santos Outras funções sobre listas dobrar os elementos de uma lista double :: [Int] -> [Int] Membership: se um elemento está na lista member :: [Int] -> Int -> Bool filtragem: apenas os números de uma string digits :: String -> String soma de uma lista de pares sumPairs :: [(Int,Int)]->[Int]

© André Santos Outras funções sobre listas insertion sort iSort :: [Int] -> [Int] ins :: Int -> [Int] -> [Int] sempre existem várias opções de como definir uma função

© André Santos Expressão case permite casamento de padrões no corpo de uma função firstDigit :: String -> Char firstDigit st = case (digits st) of [] -> ´\0´ (a:as) -> a

© André Santos Outras funções sobre listas comprimento length :: [t] -> Int length [] = 0 length (a:as) = 1 + length as concatenação (++) :: [t] -> [t] -> [t] [] ++ y = y (x:xs) ++ y = x : (xs ++ y) Estas funções são polimórficas!

© André Santos Polimorfismo função possui um tipo genérico mesma definição usada para vários tipos reuso de código uso de variáveis de tipos zip :: [t] -> [u] -> [(t,u)] zip (a:as) (b:bs) = (a,b):zip as bs zip [] [] = []

© André Santos fst :: (t,u) -> t snd :: (t,u) -> u head :: [t] -> t tail :: [t] -> [t] fst (x,y) = x snd (x,y) = y head (a:as) = a tail (a:as) = as Polimorfismo

© André Santos Exemplo: Biblioteca type Person = String type Book = String type Database = [(Person, Book)]

© André Santos Exemplo de um banco de dados exampleBase = [(”Alice”,”Postman Pat”), (”Anna”,”All Alone”), (”Alice”,”Spot”), (”Rory”,”Postman Pat”)]

© André Santos Funções sobre o banco de dados - consultas books :: Database -> Person -> [Book] borrowers :: Database -> Book ->[Person] borrowed :: Database -> Book -> Bool numBorrowed :: Database -> Person -> Int

© André Santos makeLoan :: Database -> Person -> Book -> Database returnLoan :: Database -> Person -> Book -> Database Funções sobre o banco de dados - atualizações

© André Santos Compreensões de listas Usadas para definir listas em função de outras listas: doubleList xs = [2*a|a [Int] sumPairs lp = [a+b|(a,b) String digits st = [ch | ch <- st, isDigit st]

© André Santos Exercícios Redefina as seguintes funções utilizando compreensão de listas member :: [Int] -> Int -> Bool books :: Database -> Person -> [Book] borrowers :: Database -> Book ->[Person] borrowed :: Database -> Book -> Bool numBorrowed :: Database -> Person -> Int returnLoan :: Database -> Person -> Book -> Database

© André Santos Exemplo: Text processing getWord :: String -> String dropWord :: String -> String dropSpace :: String -> String type Word = String splitWords :: String -> [Word]

© André Santos Exemplo: Text processing type Line = [Word] getLine :: Int -> [Word] -> Line dropLine :: Int -> [Word] -> [Word] splitLines :: [Word] -> [Line] fill :: String -> [Line] fill st = splitLines (splitWords st) joinLines :: [Line] -> String

© André Santos Formas de Definição combinando os itens: folding –+, ++, &&, maxi Aplicando a todos: mapping –double, todos os segundos elementos de uma lista de pares, transformar código em nome de produto Selecionando elementos: filtering –digits, procurar determinada pessoa em uma lista.