Introdução à Programação Uma Abordagem Funcional Programação Funcional Programação Funcional • Elaborar programas para uma máquina funcional que: • Avalia expressões escritas segundo regras sintáticas bem definidas; • Aceita a definição de novas funções; • Avalia funções Máquina Funcional lê expressão avalia exibe resultado 2+4 Soma de 2 e4 6 Máquina Funcional usuário: 4 – 2 resposta: 2 usuário: f 3 - 2 resposta: definição de f não conhecida usuário: carrega arquivo com funções resposta: ok usuário: f 3 - 2 resposta: 2 Arquivo texto fx=x+1 Funções Matemáticas Definição de Função Matemática Uma função F é uma relação de um conjunto A com um conjunto B onde cada elemento de A se relaciona unicamente com um elemento de B. Descrições Funcionais Extensional: explicitados: todos os elementos são f = {(a,1), (b,2), (c,3)} Intencional: os elementos são descritos através de um critério de pertinência: f = {(x,y) | x e y = 2x} Exercícios 1. Conceitue programação de computadores. 2. Quais os principais paradigmas de programação e o que os diferenciam. 3. Dos paradigmas encontrados, identifique quais serão estudados no seu curso e porque. 4. Apresente exemplo de outras linguagens técnicas usadas pelo ser humano para descrever conhecimento. A linguagem de programação Haskell • Oferece uma sintaxe simples e elegante; • Puramente funcional; • Lazy evaluation; • Tipada; • Inferência de tipos; Página da Linguagem: www.haskell.org Linha do Tempo O interpretador Hugs • Uma implementação da linguagem de programação funcional Haskell; • Provê um avaliador de expressões descritas por funções • O avaliador funciona por meio de um interpretador, que interpreta as expressões para o computador Avaliador do ambiente Hugs Operações e Primitivas Operador Denominação Número de argumentos + soma binário - subtração/ simetria binário/ unário Infixada/ pré-fixada 5–2 (-) 5 2 -3 * multiplicação binário Infixada/ pré-fixada 7*3 (*) 7 3 / divisão binário Infixada/ pré-fixada 5/2 (/) 5 2 ^ potência binário Infixada/ pré-fixada 2^2 (^) 2 2 div divisão inteira binário pré-fixada div 5 2 mod resto da divisão inteira binário pré-fixada mod 5 2 Notação Exemplo Infixada/ 2+3 (+) 2 3 pré-fixada Exemplos • 3+9/2 > 30 • FALSE • 7.4/2*3^2+sqrt 4 • 35.30 • 3+4 > 20 && 5*3 == 10 && 50 /= 34 • FALSE Descrição de Funções f x y = x*y nome da função parâmetros expressão que define a relação que há entre os parâmetros interface da função corpo da definição Exemplo Hugs> 4 * 3 – 2 10 Hugs> f 2 + 10 ERROR - Undefined variable "f" exemplo1.hs fx=x+1 Hugs>:load “c:\boeres\exemplo1.hs” Main> f 2 + 10 13 Exercício Dados os catetos a e b de um triângulo retângulo, calcular a sua hipotenusa. Exemplo de Script hipo x y = sqrt (quad x + quad y) quad x = x * x hipo x y = sqrt (x * x + y * y) Avaliação de expressões Ordem Expressão Redução Aplicada 1 hipo 3 5 expressão inicial 2 sqrt ( quad 3 + quad 5) def de hipo 3 sqrt ( 3 * 3 + quad 5) def de quad 4 sqrt ( 3 * 3 + 5 * 5) def de quad 5 sqrt (9 + 5 * 5) * 6 sqrt (9 + 25) * 7 sqrt 34 + 8 5.83095 sqrt Precedência Ordem Operação 1 +,- 2 *, / 3 div, mod Exercícios 1. Apresente a sequência de reduções necessárias para a obtenção do resultado final: a) b) c) d) mod 15 2 mod 15 2 + div 6 3 ma3 5 10 2 (15 – 2*3) / (17 – 12) 2. Defina na linguagem Haskell as funções abaixo: a) Determinação da área de um retângulo de lados a e b b) Determinação da área de um círculo de raio r c) Determinação da distância entre dois pontos 3. Calcule a média aritmética de três números. Exercícios - resolvidos • ex2a a b = a * b • ex2b r = 3.14 * r*r • ex2c x1 y1 x2 y2 = sqrt((x2-x1)^2 + (y2-y1)^2) • ex3 n1 n2 n3 = (n1+n2+n3)/3