Programação Funcional Aulas 5 & 6
|
|
|
- Heloísa Amorim Veiga
- 8 Há anos
- Visualizações:
Transcrição
1 Programação Funcional Aulas 5 & 6 Sandra Alves DCC/FCUP 2016/17 Definições usando outras funções Podemos definir funções usando outras previamente definidas (por exemplo: do prelúdio-padrão). Exemplo: factorial :: Int -> Int factorial n product [1..n] Definições recursivas Também podemos definir uma função por recorrência, i.e. usando a própria função que estamos a definir; tais definições dizem-se recursivas. Exemplo: factorial definido recursivamente. factorial :: Int -> Int factorial 0 1 factorial n n * factorial (n-1) Exemplo de uma redução factorial 3 3 * factorial 2 3 * (2 * factorial 1) 1
2 3 * (2 * (1 * factorial 0)) 3 * (2 * (1 * 1)) 6 Observações A primeira equação define o factorial de zero. A segunda equação define o factorial de n usando factorial de n 1. Logo: o factorial fica definido apenas para inteiros não-negativos. > factorial (-1) Não termina! ^C Interrupted Alternativas Duas equações sem guardas: factorial 0 1 factorial n n * factorial (n-1) Uma equação com guardas: factorial n n0 1 otherwise n*factorial (n-1) Uma equação com uma condição: factorial n if n0 then 1 else n*factorial (n-1) Porquê recursão? Modelo universal de computação: qualquer algoritmo pode ser escrito usando funções recursivas. Vamos ver que podemos demonstrar propriedades de funções recursivas usando indução matemática. Recursão sobre listas Também podemos definir funções recursivas sobre listas. Exemplo: a função que calcula o produto de uma lista de números (do prelúdio-padrão). product [] 1 product (x:xs) x*product xs 2
3 Exemplo de redução product [2,3,4] 2 * product [3,4] 2 * (3 * product [4]) 2 * (3 * (4 * product [])) 2 * (3 * (4 * 1)) 24 A função length O comprimento duma lista também pode ser definido por recursão. length :: [a] -> Int length [] 0 length (_:xs) 1 + length xs Exemplo de redução: length [1,2,3] 1 + length [2,3] 1 + (1 + length [3]) 1 + (1 + (1 + length [])) 1 + (1 + (1 + 0)) 3 A função reverse A função reverse (que inverte a ordem dos elementos numa lista) também pode ser definida recursivamente. reverse :: [a] -> [a] reverse [] [] reverse (x:xs) reverse xs ++ [x] Exemplo de redução: reverse [1,2,3] reverse [2,3] ++ [1] (reverse [3] ++ [2]) ++ [1] ((reverse [] ++ [3]) ++ [2]) ++ [1] 3
4 (([] ++ [3]) ++ [2]) ++ [1] [3,2,1] Funções com múltiplos argumentos Também podemos definir recursivamente funções com múltiplos argumentos. Por exemplo: a concatenação de listas. (++) :: [a] -> [a] -> [a] [] ++ ys ys (x:xs) ++ ys x : (xs ++ ys) A função zip que constroi a lista dos pares de elementos de duas listas. zip :: [a] -> [b] -> [(a,b)] zip [] _ [] zip _ [] [] zip (x:xs) (y:ys) (x,y) : zip xs ys A função drop que remove um prefixo de uma lista. drop :: Int -> [a] -> [a] drop 0 xs xs drop n [] [] drop n (x:xs) n>0 drop (n-1) xs Recursão mútua Podemos também definir duas ou mais funções que dependem mutamente umas das outras. Exemplo: testar se um natural é par ou impar. 1 par :: Int -> Bool par 0 True par n n>0 impar (n-1) impar :: Int -> Bool impar 0 False impar n n>0 par (n-1) 1 De forma ineficiente. 4
5 Quicksort O algoritmo Quicksort para ordenação de uma lista pode ser especificado de forma recursiva: se a lista é vazia então já está ordenada; se a lista não é vazia seja x o primeiro valor e xs os restantes: 1. recursivamente ordenamos os valores de xs que são menores ou iguais a x; 2. recursivamente ordenamos os valores de xs que são maiores do que x; 3. concatenamos os resultados com x no meio. Em Haskell: qsort :: [Int] -> [Int] qsort [] [] qsort (x:xs) qsort menores ++ [x] ++ qsort maiores where menores [x x <-xs, x <x] maiores [x x <-xs, x >x] Esta é provavelmente a implementação mais concisa do algoritmo Quicksort em qualquer linguagem de programação! Exemplo de execução (abreviando qsort para qs): qs [3,2,4,1,5] qs [2,1] ++ [3] ++ qs [4,5] (qs [1]++[2]++qs []) ++ [3] ++ (qs []++[4]++qs [5]) ([1]++[2]++[]) ++ [3] ++ ([]++[4]++[5]) [1,2,3,4,5] Como escrever definições recursivas 1. Definir o tipo da função 2. Enumerar os casos a considerar usando equações com padrões 3. Definir o valor nos casos simples 4. Definir o valor nos outros casos assumindo que a função está definida para valores de tamanho inferior 5. Generalizar e simplificar Exemplo Escrever uma definição recursiva da função init que remove o último elemento duma lista. > init [1,2,3,4,5] [1,2,3,4] > init [1] [] > init [] *** Exception: Prelude.init: empty list 5
6 Passo 1: o tipo da função é init :: [a] -> [a] Passo 2: enumerar os casos. init :: [a] -> [a] init (x:xs) Notar que init não está definido para a lista vazia. Passo 3: definir o caso simples. init :: [a] -> [a] init (x:xs) null xs [] otherwise Notar que se xs é a lista vazia então a lista (x : xs) tem um só elemento. Passo 4: definir o caso recursivo. init :: [a] -> [a] init (x:xs) null xs [] otherwise x : init xs Notar que xs é uma sub-lista de (x : xs), logo tem comprimento menor. Passo 5: simplificação. init :: [a] -> [a] init [x] [] init (x:xs) x : init xs Podemos separar o caso da lista com um só elemento numa equação e assim eliminar as guardas. Exercícios: Usando o hugs experimente as funções sum, maximum, minimum, notelem, take, zip, unzip, zip3, unzip3. Defina as funções indicadas na alínea anterior. Funções de ordem superior Uma função é de ordem superior se tem um argumento que é uma função ou um resultado que é uma função. Exemplo: o primeiro argumento de twice é uma função. twice :: (a -> a) -> a -> a twice f x f (f x) 6
7 Porquê ordem superior? Permite definir padrões de computação comuns que podem ser facilmente re-utilizados. Facilita a definição de bibliotecas para domínios específicos: processamento de listas; formatação de texto; parsing ;... Podemos provar propriedades gerais das funções de ordem superior que são válidas em qualquer use específico. A função map A função map aplica uma função a cada elemento duma lista. map :: (a -> b) -> [a] -> [b] Exemplos: > map (+1) [1,3,5,7] [2,4,6,8] > map islower "Hello!" [False,True,True,True,True,False] Podemos definir map usando uma lista em compreensão: map f xs [f x x<-xs] Também podemos definir map usando recursão: map f [] [] map f (x:xs) f x : map f xs Esta forma será útil para provar propriedades usando indução. Função filter A função filter seleciona os elementos duma lista que satisfazem um predicado (isto é, uma função cujo resultado é um valor boleano). filter :: (a -> Bool) -> [a] -> [a] Exemplos: 7
8 > filter even [1..10] [2,4,6,8,10] > filter islower "Hello, world!" "elloworld" Podemos definir filter usando uma lista em compreensão: filter p xs [x x<-xs, p x] Também podemos definir filter usando recursão: filter p [] [] filter p (x:xs) p x x : filter p xs otherwise filter p xs Funções takewhile e dropwhile takewhile seleciona o maior prefixo duma lista cujos elementos verificam um predicado. dropwhile remove o maior prefixo cujos elementos verificam um predicado. As duas funções têm o mesmo tipo: takewhile, dropwhile :: (a -> Bool) -> [a] -> [a] Exemplos: > takewhile isletter "Hello, world!" "Hello" > dropwhile isletter "Hello, world!" ", world!" > takewhile (\n -> n*n<10) [1..5] [1,2,3] > dropwhile (\n -> n*n<10) [1..5] [4,5] Definições recursivas de takewhile e dropwhile (do prelúdio-padrão): takewhile :: (a -> Bool) -> [a] -> [a] takewhile p [] [] takewhile p (x:xs) p x x : takewhile p xs otherwise [] dropwhile :: (a -> Bool) -> [a] -> [a] dropwhile p [] [] dropwhile p (x:xs) p x dropwhile p xs otherwise x:xs 8
9 As funções all e any all verifica se um predicado é verdadeiro para todos os elementos duma lista. any verifica se um predicado é verdadeiro para algum elemento duma lista. As duas funções têm o mesmo tipo: all, any :: (a -> Bool) -> [a] -> Bool Exemplos: > all even [2,4,6,8] True > any odd [2,4,6,8] False > all islower "Hello, world!" False > any islower "Hello, world!" True Podemos definir all e any usando map, and e or: all p xs and (map p xs) any p xs or (map p xs) A função foldr Muitas funções sobre listas seguem o seguinte padrão de definição recursiva: f [] z f (x:xs) x f xs Ou seja, f transforma: a lista vazia em z; a lista não-vazia x : xs usando uma operação para combinar x com f xs. Exemplos: sum [] 0 z 0 sum (x:xs) x + sum xs + product [] 1 z 1 product (x:xs) x * product xs and [] True z True and (x:xs) x && and xs && 9
10 or [] False z False or (x:xs) x or xs length [] 0 z 0 length (x:xs) 1 + length xs \x n 1 + n A função de ordem superior foldr ( fold right ) abstrai este padrão de recursão; os seus argumentos são a operação e o valor z: sum foldr (+) 0 product foldr (*) 1 and or foldr (&&) True foldr ( ) False length foldr (\x n->n+1) 0 Definição recursiva de foldr (do prelúdio-padrão): foldr :: (a -> b -> b) -> b -> [a] -> b foldr f z [] z foldr f z (x:xs) f x (foldr f z xs) Podemos visualizar foldr f z como a transformação que substitui: cada (:) por f; [ ] por z. Exemplo: sum [1,2,3,4] foldr (+) 0 [1,2,3,4] 10
11 foldr (+) 0 (1:(2:(3:(4:[])))) 1+(2+(3+(4+0))) 10 Outro exemplo: product [1,2,3,4] foldr (*) 1 [1,2,3,4] foldr (*) 1 (1:(2:(3:(4:[])))) 1*(2*(3*(4*1))) 24 A função foldl A função foldr transforma uma lista usando uma operação associada à direita ( fold right ): foldr ( ) v [x 1, x 2,..., x n ] x 1 (x 2 (... (x n v)...)) Existe outra função foldl que transforma uma lista usando uma operação associada à esquerda ( fold left ): foldl ( ) v [x 1, x 2,..., x n ] ((... ((v x 1 ) x 2 )...) x n ) Se f for associativa com elemento neutro z, então foldr f z e foldl f z dão o mesmo resultado. foldl (+) 0 [1,2,3,4] (((0+1)+2)+3)+4 10 foldr (+) 0 [1,2,3,4] 1+(2+(3+(4+0))) 10 Tal como foldr, a função foldl está definida no prelúdio-padrão usando recursão: foldl :: (a -> b -> a) -> a -> [b] -> a foldl f z [] z foldl f z (x:xs) foldl f (f z x) xs No entanto, pode ser mais fácil visualizar foldl como uma transformação sobre listas: 11
12 Fonte: Outras funções de ordem superior A função ( ) é a composição de duas funções. (.) :: (b -> c) -> (a -> b) -> a -> c f. g \x -> f (g x) Exemplo par :: Int -> Bool par x x mod 2 0 impar :: Int -> Bool impar not. par A composição permite muitas vezes simplificar definições embricadas, omitido os parêntesis e o argumento. Exemplo: f xs sum (map (^2) (filter par xs)) é equivalente a f sum. map (^2). filter par Exercícios Utilize a função any para implementar a função elem Utilize a função foldr para implementar as funções maximum e minimum Exprima a compreensão [f x x <- xs, p x] usando as funções map e filter. 12
Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas
Programação Funcional 5 a Aula Definições recursivas Pedro Vasconcelos DCC/FCUP 2014 Definições usando outras funções Podemos definir funções usando outras previamente definidas (e.g. do prelúdio-padrão).
Pedro Vasconcelos DCC/FCUP. Programação Funcional 7 a Aula Funções de ordem superior
Programação Funcional 7 a Aula Funções de ordem superior Pedro Vasconcelos DCC/FCUP 2013 Funções de ordem superior Uma função é de ordem superior se tem um argumento que é uma função ou um resultado que
Programação Funcional
Programação Funcional Lucília Camarão de Figueiredo Universidade Federal de Ouro Preto [email protected] Aula 07: Funções de Ordem Superior 1 INTRODUÇÃO Uma função é chamada função de ordem superior
Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs
Layout Ao contrário de quase todas as linguagens de programação, o Haskell não necessita de marcas para delimitar as diversas declarações que constituem um programa. Em Haskell a identação do texto (isto
Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções
Programação Funcional 3 a Aula Definição de funções Pedro Vasconcelos DCC/FCUP 2014 Definição de funções Podemos definir novas funções simples usando funções pré-definidas. minuscula :: Char -> Bool minuscula
Funções de Ordem Superior
Programação Funcional Capítulo 7 Funções de Ordem Superior José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2013.2 1/37 1 Funções de Ordem Superior 2 Composição de funções
Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro
em Haskell Linguagem Haskell Faculdade de Computação - UFU Setembro - 2009 em Haskell 1 em Haskell Noções sobre Construção de por Compreensão Funções Sobre Processamento de Fundamentos em Haskell Noções
Pedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas
Programação Funcional 4 a Aula Listas Pedro Vasconcelos DCC/FCUP 2014 Listas Listas são coleções de elementos: em que a ordem é significativa; possivelmente com elementos repetidos. Listas em Haskell Uma
Conceitos de Linguagens de Programação
Conceitos de Linguagens de Programação Aula 09 Programação Funcional (Haskell) Edirlei Soares de Lima Programação Funcional A programação funcional modela um problema computacional
Pedro Vasconcelos DCC/FCUP. Programação Funcional 8 a Aula Listas infinitas
Programação Funcional 8 a Aula Listas infinitas Pedro Vasconcelos DCC/FCUP 2014 Listas infinitas Podemos usar listas para sequências finitas, por ex.: [1,2,3,4] = 1:2:3:4:[] Nesta aula vamos ver que podemos
Funções de Ordem Superior
Programação Funcional UFOP DECOM 2014.1 Aula prática 15 Funções de Ordem Superior Sumário Resumo Uma função é conhecida como função de ordem superior quando ela tem uma função como argumento ou resulta
Aula prática 14. Expressão Lambda
Programação Funcional UFOP DECOM 2014.1 Aula prática 14 Expressão Lambda Sumário Resumo Expressões lambdas são funções anônimas que podem ser usadas como qualquer outro valor de primeira classe. Nesta
Expressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 7 Expressões Lambda José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/64 1 Valores de primeira classe 2 Expressão lambda 3 Aplicação
Programação Funcional
Programação Funcional Lucília Camarão de Figueiredo Universidade Federal de Ouro Preto [email protected] Aula 04: Definição de funções 1 DEFINIÇÃO DE FUNÇÕES f x1 x2...xn = E Define uma função f de tipo
Aula prática 5. Funções Recursivas
Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário
Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia
Programação Funcional 14 a Aula Um verificador de tautologias Pedro Vasconcelos DCC/FCUP 2014 Proposições lógicas Uma proposição lógica é construida apartir de: constantes T, F (verdade e falsidade) variáveis
Linguagem Funcional Haskell
Bacharelado em Ciência da Computação PARADIGMAS DE PROGRAMAÇÃO Linguagem Funcional Haskell Prof. Claudinei Dias email: [email protected] Principais Linguagens Funcionais LISP (John McCarthy,
Aula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006)
Aula Prática 3 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se que os alunos: consolidem os conceitos de expressão, tipo e redução; compreendam a
Paradigmas de Programação
Paradigmas de Programação Fabrício Olivetti de França 21 de Junho de 2018 1 Listas 2 Listas Uma das principais estruturas em linguagens funcionais. Representa uma coleção de valores de um determinado tipo.
Expressões Condicionais
Programação Funcional Capítulo 4 Expressões Condicionais José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/39 1 Combinando funções 2 Expressão condicional 3
Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013
Linguagem Haskell Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação Tiago Carneiro 19 Agosto 2013 1 1 Linguagem Haskell Linguagem de programação funcional É um paradigma de programação
Programação Funcional. Aula 6. Listas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.
Programação Funcional Aula 6 Listas José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011.2 1/104 1 Listas 2 Strings 3 Seqüências aritméticas 4 Casamento de padrão com
Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas
Programação Funcional 16 a Aula Árvores equilibradas Pedro Vasconcelos DCC/FCUP 2014 Aula anterior Operações sobre árvores binárias ordenadas: 1 pesquisa; 2 inserção; 3 remoção. Estas operações são mais
Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes
Programação Funcional 2 a Aula Tipos e classes Pedro Vasconcelos DCC/FCUP 2012 Tipos Um tipo é um nome para uma coleção de valores relacionados. Por exemplo, o tipo Bool True contém dois valores lógicos:
Linguagem Haskell. Maria Adriana Vidigal de Lima
de Valores em Haskell Linguagem Haskell Faculdade de Computação - UFU Dezembro - 2009 de Valores em Haskell 1 de Valores em Haskell Técnicas de por Seleção por Inserção Rápida por Bolha de Valores em Haskell
Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes
Programação Funcional 2 a Aula Tipos e classes Pedro Vasconcelos DCC/FCUP 2014 Tipos Um tipo é um nome para uma coleção de valores relacionados. Por exemplo, o tipo Bool True contém dois valores lógicos:
Programação Funcional. Capítulo 21. Parsers. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2018.
Programação Funcional Capítulo 21 Parsers José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2018.2 1/51 1 Parsers 2 Definindo um tipo para parsers 3 Parsers básicos 4
Programação Funcional em Haskell
Funções Genéricas sobre Listas Junho - 2009 1 Funções Genéricas 2 Introdução Em Haskell, como em qualquer linguagem funcional, funções são objetos de primeira classe, em que funções não avaliadas podem
Linguagens de Programação Aula 14
Linguagens de Programação Aula 14 Celso Olivete Júnior [email protected] Na aula passada Linguagem Haskell Funções Tipos básicos Expressões 2 Na aula de hoje Linguagem Haskell Listas 3 Listas e Tuplas
Linguagens de Programação. Programação Funcional e Haskell Programação Interativa Thiago Alves
Linguagens de Programação Programação Funcional e Haskell Programação Interativa Thiago Alves 1 Introdução Vimos como Haskell pode ser usado para escrever programas batch que recebem todas suas entradas
Linguagens de Programação. Programação Funcional. Carlos Bazilio
Linguagens de Programação Programação Funcional Carlos Bazilio [email protected] http://www.ic.uff.br/~bazilio/cursos/lp Funções como Valores de 1a. Classe Atribuição a Variáveis a = f() g = f
Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa
Programação Funcional 15 a Aula Árvores de pesquisa Pedro Vasconcelos DCC/FCUP 2014 Árvores binárias Um árvore binária é um grafo dirigido, conexo e acíclico em que cada vértice é de um de dois tipos:
Aula Prática 2. Paradigmas da Programação I / Programação Funcional
Aula Prática 2 Paradigmas da Programação I / Programação Funcional ESI/MCC 1 o ano (2005/2006) Nesta aula pretende-se introduzir os conceitos seguintes: valores e expressões; tipos básicos e tipos compostos;
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais
Programação Funcional Aulas 9, 10 & 11
Programação Funcional Aulas 9, 10 & 11 Sandra Alves DCC/FCUP 2015/16 1 Programas interativos Motivação Até agora apenas escrevemos programas que efetuam computação pura, i.e., transformações funcionais
Linguagem Haskell. Riocemar S. de Santana
Linguagem Haskell Riocemar S. de Santana Haskell, o que é? É uma linguagem de programação puramente funcional, de propósito geral. Nomeada em homenagem ao matemático americano Haskell B. Curry (1900 1982).
Linguagens de Programação. Programação Funcional Haskell. Carlos Bazilio
Linguagens de Programação Programação Funcional Haskell Carlos Bazilio [email protected] http://www.ic.uff.br/~bazilio/cursos/lp Motivação Haskell Motivação Haskell Motivação Java 8 List pessoas
Expressão Condicional
Programação Funcional UFOP DECOM 2014.1 Aula prática 4 Expressão Condicional Resumo Expressões condicionais permitem a escolha entre duas alternativas na obtenção do valor da expressão, com base em uma
Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos
Programação Funcional 13 a Aula Definição de tipos Pedro Vasconcelos DCC/FCUP 2014 Declarações de sinónimos Podemos dar um nome novo a um tipo existente usando uma declaração de sinónimo. Exemplo (do prelúdio-padrão):
Programação I Aula 10 Processamento de listas
Programação I Aula 10 Processamento de listas Pedro Vasconcelos DCC/FCUP 2017 Pedro Vasconcelos (DCC/FCUP) Programação I Aula 10 Processamento de listas 2017 1 / 30 Nesta aula Vamos ver alguns exemplos
Linguagens de Programação Aula 13
Linguagens de Programação Aula 13 Celso Olivete Júnior [email protected] Na aula passada Suporte para a programação orientada a objetos 2 Na aula de hoje Programação Funcional Linguagem Haskell 3 Roteiro
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/30 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)
Prof. Leonardo Augusto Casillo
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO Aula 6 Álgebra de Boole Prof. Leonardo Augusto Casillo Álgebra de Boole (ou Boleana) Desenvolvida pelo matemático britânico George
b) Recursividade 4 - Sejam a,b,c inteiros, supostamente comprimentos dos lados dum triângulo. Escreva uma função tri que devolva:
1 - Usando o interpretador ocaml, introduza sucessivamente as expressões que se seguem. Interprete os resultados que for obtendo. Para sair faça quit ;; a) Elementar # 1+2 ;; # let f x = x + 1 ;; # f 2
Casamento de Padrão. Programação Funcional. Capítulo 6. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 6 Casamento de Padrão José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.2 1/66 1 Casamento de padrão 2 Expressão case 3 Definição
Programação Funcional com a Linguagem Haskell
Programação Funcional com a Linguagem Haskell André Rauber Du Bois [email protected] Índice CAPÍTULO 1 Programação em Haskell 4 1.1 Expressões e Funções 4 1.2. Inteiros 6 1.3 Booleanos 8 1.4 Caracteres
Programação Funcional
Programação Funcional Capítulo 2 Primeiros Passos José Romildo Malaquias 2012.1 Departamento de Computação Universidade Federal de Ouro Preto 1 / 39 1 Glasgow Haskell Compiler 2 O módulo Prelude 3 Aplicação
Revisão: Tipo Abstrato de Dados Recursividade
Algoritmos e Estrutura de Dados II Revisão: Tipo Abstrato de Dados Recursividade Prof a Karina Oliveira [email protected] Introdução Estudo das estruturas de dados envolve dois objetivos complementares:
Programação Funcional. Aula 4. Definindo Funções. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.
Programação Funcional Aula 4 Definindo Funções José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011.2 1/143 1 Combinando funções 2 Expressão condicional 3 Equaçao com
Lógica de Hoare. Abordagem que usaremos: aplicar o método de Hoare sobre uma linguagem de programação imperativa simplificada.
Lógica de Hoare Método axiomático para provar que determinados programas são corretos. Introduzido em 1969 por Charles Antony Richard Hoare. Também utilizado para especificar a semântica de linguagens
Casamento de Padrão. Programação Funcional. Capítulo 5. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 5 Casamento de Padrão José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/63 1 Casamento de padrão 2 Expressão case 3 Definição
Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.
Listas Estáticas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic [email protected] Instituto de
Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013
Lista 1 - PMR2300 Fabio G. Cozman 3 de abril de 2013 1. Qual String é impressa pelo programa: p u b l i c c l a s s What { p u b l i c s t a t i c void f ( i n t x ) { x = 2 ; p u b l i c s t a t i c void
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/14 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)
Introdução à Programação
Introdução à Programação Aula 11: Processamento de Listas Rita P. Ribeiro 2016/2017 Departamento de Ciência de Computadores Nesta aula 1. Agregações 2. Eliminar repetidos 3. Crivo de Eratóstenes INTRODUÇÃO
Pedro Vasconcelos DCC/FCUP. Programação Funcional 18 a Aula Plataforma Haskell
Programação Funcional 18 a Aula Plataforma Haskell Pedro Vasconcelos DCC/FCUP 2014 A plataforma Haskell Compilador e interpretador (GHC/GHCi) Ferramentas de desenvolvimento Um conjunto de módulos de base:
Tópicos Especiais em Informática Linguagem de Programação Haskell. Tiago Alves de Oliveira
Tópicos Especiais em Informática Linguagem de Programação Haskell Tiago Alves de Oliveira Uma Introdução às Assim como as listas de compras no mundo real, listas em Haskell são extremamente úteis. Esta
Algoritmos e Estruturas de Dados LEE 2013/2014. popular devido à facilidade de implementação e eficiência
Algoritmos e Estruturas de Dados LEE 2013/2014 Algoritmos de Ordenação Parte II Quicksort [1] Provavelmente o algoritmo mais usado inventado nos anos 60 muito estudado e analisado desempenho bem conhecido
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Aula 04 Programa Recursivo e Máquinas Prof.ª Danielle Casillo Funções recursivas Alguma função é recursiva quando
Números Inteiros Algoritmo da Divisão e suas Aplicações
Números Inteiros Algoritmo da Divisão e suas Aplicações Diferentemente dos números reais (R), o conjunto dos inteiros (Z) não é fechado para a divisão. Esse não-fechamento faz com que a divisão entre inteiros
Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 11 Tipos Algébricos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/33 1 Tipos Algébricos 2/33 Tópicos 1 Tipos Algébricos 3/33
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/27 4 - INTROD. À ANÁLISE COMBINATÓRIA 4.1) Arranjos
Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática
Ambiguidade Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática De maneira equivalente, se existe mais de uma derivação mais à esquerda para uma cadeia Ou se
