programação funcional Haskell

Propaganda
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
Download