Baixe o app para aproveitar ainda mais
Prévia do material em texto
Paradigma Funcional Renata Carvalho UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Programação Funcional • Paradigma de programação onde: • Programas consistem em definições de dados e funções • Execução de um programa é o mesmo que a avaliação de expressões • Como uma calculadora: lê, calcula e dá o resultado • Funções não têm efeitos colaterais e são valores de primeira ordem Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Características • Visão clara de conceitos fundamentais • Abstração e Spos de dados • Recursão • Polimorfismo • Já foi mais usado academicamente • Hoje já é usado na indústria • Facebook, Twi\er, Foursquare Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Características • Vantagem: • Devido ao alto nível de abstração, programas funcionais são menores e mais claros • Mais próximos de uma especificação matemáSca • Predisposição a concorrência e paralelismo • Desvantagem: • Di]cil prever os custos de execução • Alguns algoritmos são mais eficientes quando implementados de forma imperaSva Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho História • 1930s • Alonzo Church desenvolve o cálculo-‐λ, um formalismo matemáSco para exprimir computação usando funções • 1950s • Inspirado no cálculo-‐λ, John McCarthy desenvolve o LISP, uma das primeiras linguagens de programação • 1970s • Robin Milner desenvolve o ML a primeira linguagem funcional com polimorfismo e inferência de Spos Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho História • 1970s – 1980s • David Turner desenvolve a teoria do lazy evalua)on, culminando na linguagem comercial Miranda • 1987 • Um comitê acadêmico inicia o desenvolvimento de Haskell, uma linguagem funcional lazy padronizada e aberta • 2003 • Publicação do Haskell 98 • 2010 • Publicação do Haskell 2010 Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Notação • Definição de variáveis • resposta :: Int resposta = 17 • maior :: Bool maior = (resposta > 30) • sim :: Bool sim = True Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Notação • Definição de funções • quadrado :: Int -‐> Int quadrado x = x * x • tudoIgual :: Int -‐> Int -‐> Int -‐> Bool tudoIgual x y z = (x == y) && (y == z) • maior :: Int -‐> Int -‐> Int maior x y | x >= y = x | otherwise = y Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Notação • Aplicação de funções • quadrado 3 = 9 • quadrado (3) = 9 • tudoIgual 1 2 3 = False • tudoIgual (1) (2) (3) = False • tudoIgual (1, 2, 3) ERRO • tudoIgual 6 6 6 = True • maior 8 2 = 8 • maior 9 11 = 11 Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Notação • Recursão • Definir o caso base (ex: fun 0) • Definir o valor para fun n usando o valor de fun n-‐1 • somarAte 0 = 0 somarAte n = somarAte n-‐1 + n Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Exercícios • Escreva uma função que recebe uma nota e retorna o conceito correspondente conforme as regras abaixo: • Nota >= 9.0 conceito A • Nota >= 7.5 e < 9.0 conceito B • Nota >= 6.0 e < 7.5 conceito C • Nota < 6.0 conceito D * USlizar os Spos Char e Float Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Exercício • Escreva uma função que dadas duas notas, retorna True caso o aluno tenha passado, e retorna False caso contrário • Para passar é necessário obter média 7.0 Programação Funcional CaracterísScas História NotaçãoExercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Exercício • Escreva uma função que, dada uma nota e a quanSdade de trabalhos feitos pelo aluno, retorna a nota final do aluno de acordo com a regra: • O primeiro trabalho feito vale 0,5; o segundo vale 1,0; o terceiro vale 1,5; e assim por diante • A maior nota permiSda é 10.0 Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Notação • Casamento de padrões • Permite usar padrões no lugar de variáveis, na definição de funções • meuNao :: Bool -‐> Bool meuNao False = True meuNao True = False • meuOu :: Bool -‐> Bool -‐> Bool meuOu True x = True meu Ou False x = x Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Notação • Letras maiúsculas • Usadas para Spos e construtores (tuplas, listas, Spos algébricos) • Letras minúsculas • Usadas funções, variáveis, parâmetros • Case sensi)ve • Comentários • -‐-‐ isso é um comentário de uma linha • {-‐ comentários de várias linhas -‐} Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Notação • Erros comuns • quadrado x = x * x • proximo x = x + 1 • Proximo x = x + 1 • proximo 2 + 1 • proximo (2 + 1) Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Exercícios • Defina as funções: • Fatorial fatorial :: Int -‐> Int • Compara se 4 números são iguais tudoIgual4 :: Int -‐> Int -‐> Int -‐> Int -‐> Bool • tudoIgual4 usando tudoIgual • Retorna quantos parâmetros são iguais contaIgual :: Int -‐> Int -‐> Int -‐> Int -‐> Int Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Notação • Definições locais • somaQuadrados :: Int -‐> Int -‐> Int • somaQuadrados x y = sqX + sqY where sqX = x * x sqY = y * y • somaQuadrados x y = sq x + sq y where sq z = z * z • somaQuadrados x y = let sqX = x * x sqY = y * y in sqX + sqY Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Notação • Definições locais • let definições in expressão • expressão where definições Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos • Números inteiros • 1, 2 ,3, … :: Int • +, -‐, *, div, ^, mod :: Int -‐> Int -‐> Int • >, >=, <, <=, ==, /= :: Int -‐> Int -‐> Bool Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos • Números inteiros – Exemplos • 2^3 = 8 • div 14 3 = 4 • 14 `div` 3 = 4 • mod 14 3 = 2 • 2 /= 5 = True • 2 == 5 = False Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos • Booleanos • True, False :: Bool • &&, || :: Bool -‐> Bool -‐> Bool • not :: Boot -‐> Bool Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos • Booleanos – Exemplos • True && False = False • True || False = True • not True = False • not False = True • xor :: Bool -‐> Bool -‐> Bool xor x y = (x || y) && not (x && y) Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos • Caracteres • ‘a’, ‘b’, ‘c’, … :: Char • ‘\t’, ‘\n’, ‘\\’, ‘\’’, ‘\”’ :: Char • ord :: Char -‐> Int • chr :: Int -‐> Char Programação FuncionalCaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos • Caracteres – Exemplos • diferenca = ord (‘A’) – ord (‘a’) • maiuscula :: Char -‐> Char maiuscula ch = chr (ord ch + diferenca) • ehDigito :: Char -‐> Bool ehDigito ch = (‘0’ <= ch) && (ch <= ‘9’) Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos • String • “abc”, “renata” :: String • ++ :: String -‐> String -‐> String • show :: ? -‐> String • read :: String -‐> ? • Overloading • ‘’, “”, “ ” são diferentes Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos • String – Exemplos • “renata” ++ “\n” ++ “carvalho” ++ “\n” = “renata\ncarvalho\n” • putStr (“renata” + “\n” + “carvalho” + “\n”) = renata carvalho Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos • Números reais • Float e Double • 4.567 • +, -‐, *, / :: Float -‐> Float -‐> Float • pi :: Float • ceiling, floor, round :: Float -‐> Int • fromIntegral :: Int -‐> Float Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Tipos • Números reais – Exemplos • 2.5 + 1.38 = 3.88 • 5 / 2 = 2.5 • ceiling 9.02 = 10 • floor 14.79 = 14 • round 5.25 = 5 • round 5.75 = 6 Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Exercícios • Defina a função adicionaEspacos que produz uma String com uma quanSdade n de espaços • Defina a função paraDireita para adicionar uma quanSdade n de espaços à esquerda de uma String, movendo-‐a para a direita Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios UNICAP – UNIVERSIDADE CATÓLICA DE PERNAMBUCO Renata Carvalho Exercícios • Escreva uma função para retornar em forma de tabela, todas as notas de um aluno, incluindo o total e a média final. Use as funções já definidas e defina novas, se achar necessário. • Ex: imprimeTabela nota1 trb1 nota2 trb2 Nota Trabalhos Nota Final 5.0 3 8.0 1.0 2 2.5 Total 10.5 Média 5.25 Programação Funcional CaracterísScas História Notação Exercícios Notação Exercícios Notação Tipos Exercícios
Compartilhar