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

Documentos relacionados
Linguagens de Programação. Programação Funcional Haskell. Carlos Bazilio

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

Conceitos de Linguagens de Programação

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

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

Paradigmas de Programação

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

Aula prática 14. Expressão Lambda

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

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

Programação Funcional

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

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

Programação Funcional Aulas 5 & 6

Linguagens de Programação Aula 13

Linguagens de Programação Aula 14

Linguagem Funcional Haskell

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

Sets. Declaração: var y : Set[Int] = Set() O tipo do conjunto não é obrigatório, podendo usar a inferência: var x = Set(1,3,5,7)

Funções de Ordem Superior

Programação Funcional

Linguagem Haskell. Riocemar S. de Santana

ao paradigma imperativo

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

Programação Funcional em Haskell

Haskell. Allek Cezana Rajab Henrique Bertolo Selga João Paulo Coelho

Linguagens de Programação Funcional

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

Expressões Condicionais

Expressões Condicionais

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

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

Tópicos Especiais em Informática Linguagem de Programação Haskell. Tiago Alves de Oliveira

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

Estruturas de dados funcionais

Testes em Haskell com a framework HUnit 1.0

Linguagens de programação funcional

Revisão C++ - Parte 1

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

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

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

Vetores em Haskell. Vetores e Matrizes. Linguagem Haskell. Maria Adriana Vidigal de Lima. Faculdade de Computação - UFU.

Linguagens de Programação Funcional

puras um ou mais apenas mesmos

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

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

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

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

Funções de Ordem Superior

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

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

Tipo de argumentos. valor. argumentos

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

Programação Funcional 9 a Aula Programas interativos

Conceito de Linguagens de Programação - 1

Gabriel Giorisatto De Angelo Luiz Otávio Gerhardt Fernandes

Rotinas, Modos e Tipos de Passagem de Parâmetros

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

DAS5102 Fundamentos da Estrutura da Informação

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

Aula 06 Introdução à Programação Matrizes

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

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

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

Conceitos de Linguagem de Programação - 2

Introdução. Universidade Federal de Uberlândia. Programação Orientada a Objetos. Prof. Fabiano Dorça

Primeira Prova de Linguagens de Programação - DCC024B -

Tipos de Dados. Capítulo Tipos de Base

Linguagem de Programação e Compiladores

INF Semântica Formal - Prova II /1

Algoritmos II prof. Daniel Oliveira

Aula prática 5. Funções Recursivas

Aula 9 Matrizes Cleverton Hentz

Módulo: PYTHON. Felipe Oliveira

Linguagens de Programação

Introdução à Programação Funcional. Conteúdo

Linguagens de Programação

Programação Funcional

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

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

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

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

Sistemas de Tipos. Cristiano Damiani Vasconcellos.

Fundamentos de Programação

Histórico. Origens da linguagem

Listas, conjuntos e dicionários

Programação Estruturada e Orientada a Objetos

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira

CURSO BÁSICO DE PROGRAMAÇÃO AULA 16. Ordenação Revisão para a prova

Capítulo 7. Expressões e Sentenças de Atribuição

Introdução a Programação de Jogos

Instituto Federal de Educação, Ciência e Tecnologia do RN Câmpus Currais Novos. LINGUAGEM C++ VARIÁVEIS COMPOSTAS Arrays Aula I

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

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

Conceitos básicos de programação

Primeira Prova de Linguagens de Programação - DCC024 - Sistemas de Informação

Principais paradigmas de programação. Programação imperativa Programação funcional Programação lógica Programação OO

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Transcrição:

Linguagens de Programação Programação Funcional Carlos Bazilio carlosbazilio@puro.uff.br http://www.ic.uff.br/~bazilio/cursos/lp

Funções como Valores de 1a. Classe Atribuição a Variáveis a = f() g = f b = g()

Funções como Valores de 1a. Classe Passagem de Parâmetros a = f() b = g(f)

Funções como Valores de 1a. Classe Retorno de Funções a = f() b = a()

Características de uma Linguagem Funcional Numa linguagem funcional, tudo, até mesmo o próprio programa, é uma função Quando falamos função, pensamos no conceito matemático deste termo: f(a, b, ) : Dom CDom Uma função f mapeia valores de Dom em Cdom f pode mapear cada valor de Dom a, no máximo, 1 único valor de CDom Se aplicamos f seguidamente para os mesmos valores de entrada (valores para a, b, ), obtemos sempre o mesmo valor resultante

Características de uma Linguagem Funcional Pelo fato de tudo ser função, algumas características interessantes no uso de funções são facilmente descritas nestas linguagens: Passagem de funções por parâmetro Retorno de funções por outras funções Composição de funções Funções anônimas Chamadas parciais de funções

Exemplo Scheme Originária da linguagem LISP, que é precurssora da maioria das linguagens funcionais Expressões nesta linguagem são escritas de forma parentizada e pré-fixada (fnç arg1 arg2 argn) Principal distribuição: DrScheme

Exemplos Scheme (define fatorial (lambda (n) (if (= n 0) 1 (* n (fatorial (- n 1))))))

Exemplos Scala Linguagem que mistura os paradigmas funcional e orientado a objetos Ganhou notoriedade recente por ter sido adotada pelo Twitter em detrimento da linguagem Ruby (questões de desempenho)

Exemplos Scala def loopwhile(def cond: => Boolean)(def body: => Unit): Unit = { if (cond) { body; loopwhile(cond)(body); Define método loopwhile } } var i = 10; loopwhile (i > 0) { Console.println(i); i = i - 1 } Sintaxe comum!!!

Exemplos Haskell fatorial :: Int -> Int fatorial 0 = 1 fatorial n = fatorial (n-1) * n OU fatorial n n == 0 = 1 otherwise = fatorial (n-1) * n OU fatorial n = if n == 0 then 1 else fatorial (n-1) * n

Haskell Linguagem funcional, das listadas, que mais se aproxima de definições matemáticas É fortemente tipada Possui um sistema de tipos bastante rebuscado, fazendo inferência de tipos quando estes não são fornecidos

Haskell Expressividade

Haskell Expressividade II s? [] = [] s? (x:xs) = s? [y y<-xs, y<x ] ++ [x ] ++ s? [y y<-xs, y>=x] O que faz a função s?

Haskell Alguns Links Site principal: http://www.haskell.org/haskellwiki/haskell Instalação: http://www.haskell.org/platform/ WikiBook: http://en.wikibooks.org/wiki/haskell Exemplos reais: http://book.realworldhaskell.org/read/ Um tutorial: http://haskell.tailorfontela.com.br/

Haskell Tipos Pré-Definidos Tipo Valores Int -100, 0, 1, 50,... Integer -3333333, 3, 32408034852039504395204,... Float/Double -3.2223433, 0.0, 3.0,... Char 'a', 'z', 'A', 'Z', '&',... String Bazilio, Linguagens,... Bool True, False

Listas Tipo coleção comum em linguagens funcionais São representadas por valores entre [ e ] ['a', 'b', 'c'] ou [ a, b, c ] Para varrer uma lista utilizamos o operador : [ a, b, c ] equivale a a : [ b, c ] [ a, b, c ] equivale a cab : Resto ; onde cab = a e Resto = [ b, c ] [] representa uma lista vazia

Exercícios Crie uma função que calcule a soma de uma lista de números Crie uma função que dada uma lista de números retorne a lista dos ímpares (função odd) Faça o mesmo para uma lista de pares (função even)

Exercícios Como podemos representar uma matriz? Crie uma função para, dada uma matriz, um número de linha e outro de coluna, retorne o valor existente nesta posição Crie uma função para, dada 2 listas ordenadas, fazer um merge desta, ou seja, gerar uma nova lista ordenada resultante da junção destas 2

Funções de Alta Ordem Funções que usualmente recebem outras funções como parâmetro para realização de suas tarefas Exemplos: Mapeia: recebe um conjunto de valores e uma função e retorna o conjunto com a função aplicada a cada valor deste Filtra: recebe um conjunto e uma função teste e retorna um subconjunto que satisfaça a função Acumula: recebe um conjunto e uma função e retorna o resultado da aplicação da função a todos os elementos do conjunto

Funções Lâmbda void map (int vet [100], int f (int)) { for (int i = 0; i < 99; i++) vet[i] = f(vet[i]); } int inc (int x) { return x++; } main() { int vetor [100] = {1, 2, 3,, 99}; map (vetor, inc); }

Listas Funções head, tail, last, init, length, null, reverse, take, drop, maximum, minimum, sum, product, elem (pertence infixado), ++ Faixas: [1.. 20], [2, 4.. 20], [20, 19.. 1] Compreensão de listas: [x*2 x <- [1..10]] [x*2 x <- [1..10], x*2 >= 12] [ x x <- [50..100], x `mod` 7 == 3] boombangs xs = [ if x < 10 then "BOOM!" else "BANG!" x <- xs, odd x] boombangs [7..13]

Exemplos Haskell [1..] -- Lista infinita (looping) [x * x x [1..]] -- Lista infinita (looping) take 100 [x * x x [1..]]

Tuplas Tuplas são um recurso em Haskell que permite a combinação de valores de tipos diferentes, como um tipo registro. (1, Fulano, 9999, Rua A ) Como listas são monotipadas, tuplas são um mecanismo que permite o agrupamento de valores com tipos diferentes Para tuplas com 2 valores, as funções prédefinidas fst e snd retornam 1o. e 2o. valores Para outros tamanhos, basta definir novas funções: third (_, _, x, _) = x

Tipos Sinônimo e do Usuário Tipos sinônimo são uma maneira de chamar tipos conhecidos de uma outra forma (alias) Em Haskell definimos estes com a palavra reservada 'type'. Exemplos: type Caracter = Char type CPF = [Caracter] type Nome = [Caracter] type Pessoa = (Nome, CPF) Sinônimos podem ser utilizados para tipos isolados, listas ou tuplas

Casamento de Padrões soma [] = 0 soma (cab:resto) = cab + soma resto soma (cab1:cab2:resto) = cab1 + cab2 + soma resto soma (_:resto) = 1 + soma resto

Hierarquia de Classes em Haskell Classes em Haskell definem como conjuntos de tipos irão se comportar Ou seja, os objetos neste caso são os tipos definidos na linguagem

Referências http://en.wikibooks.org/wiki/haskell Wikipedia: Functional Programming http://www.drdobbs.com/architecture-anddesign/in-praise-of-haskell/240163246? elq=03bf1275b97046718cf499071256044e

+ Exemplos de Definições de Tipos webapp :: Request -> Response databasequery :: Query -> Database -> ResultSet databaseupdate :: Update -> Database -> Database game :: Events -> GameState -> GameState

Looping de um Jogo // Imperativo var gamestate = initgamestate(); while (!gamestate.isquit()) { var events = pollforevents(); updategamestate(gamestate, events); rendergamestate(gamestate); } // Funcional play = loop initialgamestate loop current = do events <- pollevents let next = updategamestate current events rendergamestate next loop next