Linguagens de Programação Funcional

Documentos relacionados
Informações. Programação Funcional. Por que um curso de programação funcional? O que é Programação Funcional? Objetivos da programação funcional

Linguagens de Programação Funcional

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

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 Declarando Tipos Thiago Alves

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

ao paradigma imperativo

Linguagens de programação funcional

Linguagem Funcional Haskell

Programação Funcional

Conceitos de Linguagens de Programação

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

Linguagens de Programação Aula 13

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

Linguagens de Programação

Conceitos de Linguagem de Programação - 2

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

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

GUIA DE FUNCIONAMENTO DA UNIDADE CURRICULAR

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

3. Linguagem de Programação C

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

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

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

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

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

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Slides trabalhados durante a quinta aula

Capítulo 1 Introdução

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

Variáveis e Operadores em C

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

Tipos de Dados Simples (Continuação)

Universidade Estadual de Santa Cruz

Programação Funcional

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

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

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Linguagens Computacionais (Conceitos Básicos)

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

Linguagens de Programação

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

Linguagem Haskell. Riocemar S. de Santana

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

Sistemas de Tipos. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Conhecendo a Linguagem de Programação C

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

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

Linguagens de Programação

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

Aspectos preliminares

Carlos Eduardo Batista. Centro de Informática - UFPB

Programação Funcional em Haskell

Slide 01 16/03/2017. Estruturas de Dados. Prof. Cleziel Franzoni da /Cleziel.

Expressões Condicionais

Linguagens de Programação

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 206 Departamento de Informática Centro Tecnológico

Introdução à Ciência da Computação. Prof. Dr. Rogério Vargas

Expressão Condicional

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

Puca Huachi Vaz Penna

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Programação I A Linguagem C. Prof. Carlos Alberto

Linguagens de Programação

Paradigmas de Programação

Programação Funcional Aulas 5 & 6

Linguagens de Programação

Introdução à Programação Funcional

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

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

Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES. Linguagem C. Linguagem C Estrutura Básica. Constante (literais) Linguagem C Primeiro Programa

Introdução à Programação Aula 04. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 201 Departamento de Informática Centro Tecnológico

Noçõ linguagem Java. Profs. Marcel Hugo e Jomi Fred Hübner. Departamento de Sistemas e Computação Universidade Regional de Blumenau - FURB

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

Testes em Haskell com a framework HUnit 1.0

Universidade Estadual De Santa Cruz (UESC)

Linguagem de Programação III

HASKELL. Breno Simão Boscaglia Pablo Santana Satler Ramon Pereira de Matos

Os valores são as entidades básicas da linguagem Haskell. São os elementos atómicos.

Laboratório de Introdução à Ciência da Computação I

Computação Eletrônica. Tipos de dados, constantes, variáveis, operadores e expressões. Prof: Luciano Barbosa

puras um ou mais apenas mesmos

Paradigmas de Programação

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Linguagens de Programação

4.2. CLASSES Versão

Aula prática 5. Funções Recursivas

Implementação de Linguagens

Programação Orientada a Objetos. Programação Funcional

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

Programação Funcional Aulas 9, 10 & 11

03/04/2016 LÓGICA MATEMÁTICA. Prof. Esp. Fabiano Taguchi. Introdução ao Prolog

Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática. Erlang. Luiz Carlos Passamani Filho.

Python - Variáveis e expressões

Transcrição:

Linguagens de Programação Funcional George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br)

Introdução O projeto de linguagem imperativas é baseado na arquitetura de von Neumann Eficiência é o objetivo principal, mesmo que isso seja visto, por alguns, como uma restrição desnecessária ao projeto de desenvolvimento de software O projeto de linguagens funcionais é baseado em funções matemáticas Uma sólida base teórica

Programação Funcional Programação com alto nível de abstração Soluções elegantes, concisas e poderosas Funções computam um resultado que depende apenas dos valores das entradas Forte fundamentação teórica, o que permite mais facilmente provas de propriedades sobre os programas

Programação Funcional: Objetivos Programação com um alto nível de abstração, possibilitando: alta produtividade programas mais concisos programas mais fáceis de entender menos erros provas de propriedades sobre programas

Funções matemáticas Uma função matemática faz um mapeamento entre membros de um conjunto, chamado domínio, para um outro conjunto, chamado imagem Uma expressão lambda especifica os parâmetros e o mapeamento de uma função da seguinte forma λ(x) x * x * x para a função cube (x) = x * x * x

Expressões Lambda Expressões lambda descrevem funções sem nome Expressões lambda são aplicadas aos parâmetros colocando os parâmetros após a expressão (λ(x) x * x * x)(2) que é avaliado como sendo 8

Formas Funcionais Uma função de ordem superior, ou forma funcional, é aquela que toma funções como parâmetros, que produz uma função como resultado, ou ambos

Composição de Funções Uma forma funcional que tem dois parâmetros funcionais e produz uma função cujo valor é a primeira função paramétrica real aplicada ao resultado da segunda Forma: h f g que significa h (x) f ( g ( x)) Para f (x) x + 2 e g (x) 3 * x, h f g gerando (3 * x)+ 2

Apply-to-all É uma forma funcional que toma uma única função como parâmetro e se aplica a uma lista de argumentos, gerando uma lista como saída Forma: α Para h (x) x * x α( h, (2, 3, 4)) produz (4, 9, 16)

Fundamentos de Linguagens de Programação Funcionais O objetivo do projeto LPF é imitar funções matemáticas no maior grau possível O processo básico de computação é fundamentalmente diferente entre LPF e linguagens imperativas Em uma linguagem imperativa, operações são realizadas e os resultados são armazenados em variáveis para posterior uso Gerenciamento de variáveis é uma constante preocupação e fonte de complexidade para a programação imperativa Em uma LPF, variáveis não são necessárias, como é o caso na matemática

Transparência Referencial Em uma LPF, a avaliação de uma função sempre produz o mesmo resultado dado os mesmos parâmetros

Notação: programação baseada em definições answer :: Int answer = 42 greater :: Bool greater = (answer > 71) yes :: Bool yes = True

Definição de funções square :: Int -> Int square x = x * x allequal :: Int -> Int -> Int -> Bool allequal n m p = (n == m) && (m == p) maxi :: Int -> Int -> Int maxi n m n >= m = n otherwise = m

Avaliando Expressões Encontrar o valor de uma expressão Usar definições das funções addd :: Int -> Int -> Int addd a b = 2 * (a+b) addd 2 (addd 3 4) = 2 * (2 + (addd 3 4)) = 2 * (2 + 2 * (3 + 4)) = 32

Prova de propriedades Exemplo: addd a b = 2 * (a+b) = 2 * (b+a) = addd b a Válida para quaisquer argumentos a e b Não seria válida em linguagens imperativas, com variáveis globais.

Em uma linguagem imperativa int b;... int f (int x) { b = x; return (5) } addd (f 3) b == addd b (f 3)?

Tipos Básicos Inteiros 1,2,3,...:: Int +, *, -, div, mod :: Int -> Int -> Int >, >=, ==, /=, <=, < :: Int -> Int -> Bool Booleanos True, False :: Bool &&, :: Bool -> Bool -> Bool not :: Bool -> Bool

Exemplo :: sales (vendas) suponha vendas semanais dadas pela função sales :: Int -> Int total de vendas da semana 0 à semana n? totalsales :: Int -> Int sales 0 + sales 1 +... + sales (n-1) + sales n totalsales n n == 0 = sales 0 otherwise = totalsales (n-1) + sales n

Recursão Definir caso base, i.e. valor para fun 0 Definir o valor para fun n usando o valor de fun (n-1) Este é o caso recursivo. maxsales :: Int -> Int maxsales n n == 0 = sales 0 otherwise = maxi (maxsales (n-1)) (sales n)

Casamento de Padrões mynot :: Bool -> Bool mynot True = False mynot False = True myor :: Bool -> Bool -> Bool myor True x = True myor False x = x myand :: Bool -> Bool -> Bool myand False x = False myand True x = x

Caracteres e Strings a, b,...:: Char \t, \n, \\ :: Char abc, andre :: String ++ :: String -> String -> String abc ++ def, e são diferentes!

Ponto Flutuante Float Double 22.3435 :: Float +,-,*,/ :: Float -> Float -> Float pi :: Float ceiling, floor, round :: Float -> Int

Estruturas de dados :: Tuplas intp :: (Int, Int) intp = (33,43) (True, x ) :: (Bool, Char) (34, 22, b ) :: (Int, Int, Char) addpair :: (Int,Int) -> Int addpair (x,y) = x+y shift :: ((Int,Int),Int) -> (Int,(Int,Int)) shift ((x,y),z) = (x,(y,z))

Sinônimos de Tipos type Name = String type Age = Int type Phone = Int type Person = (Name, Age, Phone) name :: Person -> Name name (n,a,p) = n

Definições Locais Estilo bottom-up ou top-down sumsquares :: Int -> Int -> Int sumsquares x y = sqx + sqy where sqx = x * x sqy = y * y sumsquares x y = sq x + sq y where sq z = z * z sumsquares x y = let sqx = x * x sqy = y * y in sqx + sqy

Definições Locais maxthreeoccurs :: Int -> Int -> Int -> (Int,Int) maxthreeoccurs m n p = (mx, eqcount) where mx = maxithree m n p eqcount = equalcount mx m n p... Duas formas: let definições in expressão definições where definições

Notação Maiúsculas: tipos e construtores Minúsculas: funções e argumentos Case sensitive Comentários: -- isto e um comentario de uma linha {- isto e um comentario de varias linhas... -}

Referências A Gentle Introduction to Haskell 98. Haskell The Craft of Functional Programming. Simon Thompson. www.haskell.org

Leituras Recomendadas Why Functional Programming Matters. John Hughes. A Gentle Introduction to Haskell 98. Tutorial sobre Haskell.

Créditos Alguns destes slides foram baseados num conjunto de slides originalmente criados por André Santos (alms@cin.ufpe.br) e por Hermano Perrelli (hermano@cin.ufpe.br)

Aplicações de Linguagens Funcionais LISP é usada em inteligência artificial Representação do conhecimento Aprendizagem de Máquina Processamento de Linguagem Natural Modelagem da fala e da visão Scheme é usada para ensinar programação em um número considerável de universidades Programas com milhares de linhas de código: compiladores, provadores de teoremas, entre outros Ericsson utiliza Erlang, uma linguagem funcional concorrente, para programação de switches de redes/telecomunicações, com excelentes resultados

Linguagens Funcionais versus Linguagens Imperativas Linguagem Imperativas Execução eficiente Semântica Complexa Sintaxe complexa Concorrência é formulada pelo programador Linguagens Funcionais Semântica simples Sintaxe simples Execução ineficiente Programas podem ser feitos concorrentes de maneira automática