Вы находитесь на странице: 1из 24

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

Вам также может понравиться