Programação Funcional

Documentos relacionados
Programação Funcional

Pedro Vasconcelos DCC/FCUP. Programação Funcional 3 a Aula Definição de funções

Programação Funcional BCC222. Aulas 5,6. Mais sobre recursão

Funções de Ordem Superior

Pedro Vasconcelos DCC/FCUP. Programação Funcional 5 a Aula Definições recursivas

Expressões Condicionais

Expressões Condicionais

Linguagem Funcional Haskell

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013

Aula prática 14. Expressão Lambda

Tipos de Dados Algébricos

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs

Conceitos de Linguagens de Programação

Programação Funcional Aulas 5 & 6

Pedro Vasconcelos DCC/FCUP. Programação Funcional 4 a Aula Listas

Expressões Lambda. Programação Funcional. Capítulo 7. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Expressão Condicional

Aula Prática 2. Paradigmas da Programação I / Programação Funcional

Aula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006)

Funções de Ordem Superior

Paradigmas de Programação

Programação Funcional em Haskell

Layout. Módulos. Normalmente, cada módulo está armazenado num ficheiro com o mesmo nome do módulo. Exemplo.hs

Programação Funcional. Aula 4. Definindo Funções. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Aula 03 Introdução à Programação com a Linguagem Python

Listas em Haskell. Listas. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU. Setembro

Introdução à Programação. Uma Abordagem Funcional

Linguagens de Programação Aula 14

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Programação Funcional 14 a Aula Classes de tipos revisitadas

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Linguagens de Programação. Programação Funcional. Carlos Bazilio

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2012.

Linguagens de Programação Aula 13

Linguagem Haskell. Riocemar S. de Santana

puras um ou mais apenas mesmos

Pedro Vasconcelos DCC/FCUP. Programação Funcional 7 a Aula Funções de ordem superior

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos

Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I

Programação Funcional Capítulo 3 Tipos e Classes

Casamento de Padrão. Programação Funcional. Capítulo 6. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Linguagens de Programação. Programação Funcional e Haskell Declarando Tipos Thiago Alves

Casamento de Padrão. Programação Funcional. Capítulo 5. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto

Estruturas de dados. Pedro Vasconcelos. 3 de Março de 2014

Programação Funcional. Aula 3. Tipos e Classes. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Programação Funcional 9 a Aula Programas interativos

Linguagens de Programação

Linguagens de Programação. Programação Funcional e Haskell Programação Interativa Thiago Alves

Pedro Vasconcelos DCC/FCUP. Programação Funcional 15 a Aula Árvores de pesquisa

Lambda Cálculo e Programação Funcional. Programação Funcional Bacharelado em Sistemas de Informação Maio

Introdução à Programação uma Abordagem Funcional

Pedro Vasconcelos DCC/FCUP. Programação Funcional 19 a Aula Raciocinar sobre programas

Bacharelado em Sistemas de Informação Programação Funcional. Lista de Exercicios - Linguagem Haskell

Conceitos de Linguagem de Programação - 2

Programação Funcional

Linguagens de Programação Programação Funcional (Haskell)

Linguagens de Programação Funcional

Processamento da Informação

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Pedro Vasconcelos DCC/FCUP. Programação Funcional 8 a Aula Listas infinitas

Prova. t ::= t t. t 1 t 4 t 2 t 3 (t 1 t 2 ) (t 3 t 4 ) (t 2 t 1 ) (t 4 t 3 )

Programação Funcional. Aula 6. Listas. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2011.

Programação Funcional. Capítulo 21. Parsers. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2018.

Linguagens de Programação

Testes em Haskell com a framework HUnit 1.0

Linguagens de Programação

Aula de hoje. Expressões. Expressões. Expressões. Exemplos. Programa em Python. SCC Introdução à Programação para Engenharias

Processamento da Informação Teoria. Desvio Condicional

Linguagens de Programação

Pedro Vasconcelos DCC/FCUP. Programação Funcional 17 a Aula Tipos abstratos

Programação Funcional 13 a Aula Tipos abstratos

Programação Funcional. Capítulo 2. Primeiros Passos. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.

Programação Funcional Aulas 9, 10 & 11

INSTITUTO FEDERAL CATARINENSE Campus Ibirama

4.1- Aritméticos + soma - subtração * multiplicação / divisão % módulo (resto da divisão de inteiros ).

Aula prática 5. Funções Recursivas

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

Linguagens de Programação Funcional

Linguagens de Programação Conceitos e Técnicas. Amarrações

MCG114 Programação de Computadores I. Comandos de condição 3/26/18. Comando if. Comando if. Até agora... Comandos de Condição! Comandos de Condição

Processamento da Informação Estruturas de seleção simples e composta

Computação 1 - Python Aula 3 - Teórica: Tipos de dados, Strings, Estrutura Condicional 1/ 28

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

Processamento da Informação Teoria Funções

EXPRESSÕES BOOLEANAS. Ex: boolean b = false; // declara uma variável do tipo boolean e atribui false

Questão 1 Analise o trecho do código abaixo, escrito na linguagem C#:

Comandos de desvio de fluxo. Expressões lógicas.

Tipos de Dados. Capítulo Tipos de Base

Programação Funcional

Introdução à Programação. Expressões Booleanas e Comandos Condicionais

Programação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2013.

INF Semântica Formal - Prova II /1

CIT Aula 02 Variáveis e Estruturas de desvio condicional. Autor: Max Rodrigues Marques Carga Horária: 2 h 22/07/15 1

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Tipos abstratos de dados

Introdução à Programação Aula 19 Programação com objetos

Programação em Linguagem C

4.2. CLASSES Versão

Transcrição:

Programação Funcional Lucília Camarão de Figueiredo Universidade Federal de Ouro Preto lucilia@dcc.ufmg.br 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 T1 T2... Tn T, onde Ti é o tipo do i-ésimo argumento de f, para i=1,....n, e T é o tipo da expressão E (ou seja, o tipo do valor retornado por f) Exemplos de operações: double :: Num a => a a double x = 2*x exor :: Bool Bool Bool exor x y = (x y) && (not (x && y)) max3 x y z :: Ord a => a a a a max3 x y z = max(max(x,y),z) DEFINIÇÃO DE FUNÇÕES 2

EXPRESSÕES CONDICIONAIS f x1 x2...xn = E Na maioria das linguagens de programação, funções podem ser definidas usando-se expressões condicionais: max :: Ord a => a a a max x y = if (x >= y) then x else y abs :: Num a, Ord a => a a abs x = if x > 0 then x else -x EXPRESSÕES CONDICIONAIS 3

EXPRESSÕES CONDICIONAIS Expressões condicionais podem ser aninhadas: signum x = if x>0 then 1 else if x==0 then 0 else -1 Nota: Em Haskell, expressões condicionais devem sempre ter a cláusula else isso evita possíveis problemas de ambiguidade envolvendo expressões condicionais aninhadas. EXPRESSÕES CONDICIONAIS 4

EQUAÇÕES COM GUARDAS Como alternativa ao uso de expressões condicionais, podemos definir funções usando equações com guardas: abs x x > 0 = x otherwise = -x signum x x>0 = 1 x==0 = 0 x<0 = -1 Equações com guardas tornam as definições mais legíveis. Nota: A condição otherwise usada em equações com guardas é definida no Prelude como otherwise = True. EQUAÇÕES COM GUARDAS 5

CASAMENTO DE PADRÃO O uso casamento de padrão favorece a legibilidade: not :: Bool Bool not True = False not False = True (&&) :: Bool Bool Bool True && True = True True && False = False False && True = False False && False = False CASAMENTO DE PADRÃO 6

CASAMENTO DE PADRÃO O operador && pode ser definido mais facilmente como: True && True = True _ && _ = False Entretanto, a seguinte definição é sempre mais eficiente (uma vez que sempre evita a avaliação do segundo argumento): False && _ True && b = b = False Nota: O padrão _ corresponde a um "coringa", que casa com qualquer argumento. CASAMENTO DE PADRÃO 7

PADRÕES PARA LISTAS Em Haskell, toda lista não vazia é construída por meo do operador : (denominado cons), que adiciona um novo elemento ao início da lista, ou seja, : tem tipo a [a] [a]: [1,2,3] significa 1:(2:(3:[])) O operador cons também pode ser usado em padrões, caso no qual ele destrói uma lista não vazia: head :: a [a] head (x:_) = x tail :: [a] [a] tail (_:xs) = xs PADRÕES PARA LISTAS 8

PADRÕES PARA LISTAS Mais alguns exemplos de definições de funções sobre listas: length :: [a] Int length [] = 0 length (_:xs) = 1 + length xs sum :: [a] Int sum [] = 0 sum (x:xs) = x + length xs (++) :: [a] [a] [a] [] ++ ys = ys (x:xs) ++ ys = x:(xs++ys) PADRÕES PARA LISTAS 9

PADRÕES MAIS UM EXEMPLO: A função a seguir determina a média de uma lista de valores inteiros: average :: [Int] Float average xs@(y:yx) = fromint (sum xs) / fromint (length xs) Essa definição ilustra o uso de alias em um padrão. A definição acima não é, entretanto, eficiente. Porque? Uma definição eficiente será apresentada mais adiante. PADRÕES MAIS UM EXEMPLO: 10

EXPRESSÕES LAMBDA Podemos construir uma função sem que seja necessário dar um nome a essa função para isso, usamos uma lambda abstração: λx x+1 representa a função que, dado um argumento x, retorna x+1. EXPRESSÕES LAMBDA 11

PORQUE EXPRESSÕES LAMBDA SÃO ÚTEIS? Expressões Lambda podem ser usadas para dar significado formal a definições de funções currificadas. Por exemplo: add x y = x+y significa add = λx (λx x+y) Expressões Lambda são úteis para definir funções que retornam funções como resultado. Por exemplo: compose f g x = f (g x) é mais naturalmente definida como: compose f g = λx f (g x) PORQUE EXPRESSÕES LAMBDA SÃO ÚTEIS? 12

EXERCÍCIOS 1. Dê 2 possíveis definições para o operador usando casamento de padrão. 2. Considere uma função safetail, que se comporta como a função tail, exceto que safetail mapea a lista vazia em lista vazia, enquanto tail produz um erro nesse caso. Defina safetail usando: (a) uma expressão condicional (b) equações com guardas (c) casamento de padrão Obs: A função null :: [a] Bool, definida no Prelude, pode ser usada para testar se uma lista é vazia. Como vocˆxe definiria essa função? EXERCÍCIOS 13