Introduo
Programao
Uma Abordagem Funcional
Programao
Funcional
Programao Funcional
Elaborar programas para uma mquina
funcional que:
Avalia expresses escritas segundo regras sintticas bem definidas;
Aceita a definio de novas funes;
Avalia funes
Mquina Funcional
l expresso 2+4
Soma de 2 e
avalia 4
exibe resultado 6
Mquina Funcional
usurio: 4 2
resposta: 2
usurio: f 3 - 2
resposta: definio de f no conhecida Arquivo texto
usurio: carrega arquivo com funes fx=x+1
resposta: ok
usurio: f 3 - 2
resposta: 2
Funes
Matemticas
Definio de Funo Matemtica
Uma funo F uma relao de um conjunto A com um
conjunto B onde cada elemento de A se relaciona
unicamente com um elemento de B.
Descries Funcionais
Extensional: todos os elementos so explicitados:
f = {(a,1), (b,2), (c,3)}
Intencional: os elementos so descritos atravs de
um critrio de pertinncia:
f = {(x,y) | x e y = 2x}
Exerccios
1. Conceitue programao de computadores.
2. Quais os principais paradigmas de programao e o
que os diferenciam.
3. Dos paradigmas encontrados, identifique quais sero
estudados no seu curso e porque.
4. Apresente exemplo de outras linguagens tcnicas
usadas pelo ser humano para descrever conhecimento.
A linguagem de programao Haskell
Oferece uma sintaxe simples e elegante;
Puramente funcional;
Lazy evaluation;
Tipada;
Inferncia de tipos;
Pgina da Linguagem: www.haskell.org
Linha do Tempo
O interpretador Hugs
Uma implementao da linguagem de programao
funcional Haskell;
Prov um avaliador de expresses descritas por
funes
O avaliador funciona por meio de um interpretador,
que interpreta as expresses para o computador
Avaliador do ambiente Hugs
Operaes e Primitivas
Nmero de
Operador Denominao Notao Exemplo
argumentos
Infixada/ 2+3
+ soma binrio
pr-fixada (+) 2 3
52
subtrao/ binrio/ Infixada/
- (-) 5 2
simetria unrio pr-fixada -3
Infixada/ 7*3
* multiplicao binrio
pr-fixada (*) 7 3
Infixada/ 5/2
/ diviso binrio
pr-fixada (/) 5 2
Infixada/ 2^2
^ potncia binrio
pr-fixada (^) 2 2
div diviso inteira binrio pr-fixada div 5 2
resto da diviso
mod binrio pr-fixada mod 5 2
inteira
Exemplos
3+9/2 > 30
FALSE
7.4/2*3^2+sqrt 4
35.30
3+4 > 20 && 5*3 == 10 && 50 /= 34
FALSE
Descrio de Funes
f x y = x*y
nome da expresso que define a
funo parmetros relao que h entre os
parmetros
interface da funo corpo da definio
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
Exerccio
Dados os catetos a e b de um tringulo retngulo,
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)
Avaliao de expresses
Ordem Expresso Reduo Aplicada
1 hipo 3 5 expresso 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
Precedncia
Ordem Operao
1 +,-
2 *, /
3 div, mod
Exerccios
1. Defina na linguagem Haskell as funes abaixo:
a) Determinao da rea de um retngulo de lados a e b
b) Determinao da rea de um crculo de raio r
c) Determinao da distncia entre dois pontos
2. Calcule a mdia aritmtica de trs nmeros.
Exerccios - 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