Upload
jason
View
39
Download
1
Embed Size (px)
DESCRIPTION
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1. linguagem Haskell: oferece uma sintaxe simples e elegante; ambiente HUGS: uma implementação da linguagem de programação funcional Haskell ; - PowerPoint PPT Presentation
Citation preview
Introdução à Programação: uma Abordagem Funcional
Programação IEngenharia de Computação
Prof.ª Claudia Boeres
2009/1
A linguagem de programação Haskell e o ambiente Hugs
linguagem Haskell: oferece uma sintaxe simples e elegante;
ambiente 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
Ambiente HUGS
avaliador: pode ser usado como uma calculadora:
? 3 + 5 * 213? (3 + 5) * 216?
primitivas: funções já existentes em bibliotecas do HUGS
Primeiras operações e primitivas...
Operador Denominação
Número de argumentos
notação exemplo
+ soma binário infixada/pré-fixada
2 + 3(+) 2 3
- 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 2mod resto da
divisãointeira
binário pré-fixada mod 5 2
Exemplo
Hugs> 4 * 3 – 210
Hugs> f 2 + 10ERROR - Undefined variable "f"
Hugs>:load “c:\boeres\exemplo1.hs”
Main> f 2 + 1013
f x = x + 1exemplo1.hs
hugs
Descrição de funções
f x y = x * y
nome da
funçãoparâmetros
expressão aritmética que define a relação que há entre
os parâmetros
interface da função corpo da definição
Scripts: Funções devem ser descritas em um arquivo texto.
Interações do programador com o ambiente de programação
Editor de
textoArquivo texto
com definições de funções
Ambiente Interpretador
HUGSProgramador
Exemplo: Cálculo da hipotenusa de um triângulo retângulo
Dados os catetos a e b de um triângulo retângulo, calcular a sua hipotenusa.
hugs
Definições locais
restritas ao contexto específico da definição de uma função.Exemplo:
hipo x y = sqrt (quad x + quad y) where
quad x = x * x
Definições locais – mais exemplos
hipo1 x y = sqrt (k1 + k2) where k1 = x * x k2 = y * y
hipo2 x y = sqrt (k1 + k2) where k1 = x * x; k2 = y * y
hipo3 x y = sqrt k where k = quad x + quad y where quad x = x * x
Avaliação de expressões
ordem expressão redução aplicada
1 hipo 3 5 + hipo 4 4 expressão inicial2 sqrt ( quad 3 + quad 5) + hipo 4 4 def de hipo3 sqrt ( 3 * 3 + quad 5) + hipo 4 4 def de quad
4 sqrt (3 * 3 + 5 * 5) + hipo 4 4 def de quad5 sqrt (3 * 3 + 5 * 5) + sqrt (quad 4 + quad 4) def de hipo6 sqrt (3 * 3 + 5 * 5) + sqrt (4 * 4 + quad 4) def de quad
7 sqrt (3 * 3 + 5 * 5) + sqrt (4 * 4 + 4 * 4) def de quad8 sqrt (9 + 5 * 5) + sqrt (4 * 4 + 4 * 4) *9 sqrt (9 + 25) + sqrt (4 * 4 + 4 * 4) *10 sqrt 34 + sqrt (4 * 4 + 4 * 4) +11 5.83095 + sqrt (4 * 4 + 4 * 4) sqrt12 5.83095 + sqrt (16 + 4 * 4) *13 5.83095 + sqrt (16 + 16) *14 5.83095 + sqrt (32) +15 5.83095 + 5.65685 sqrt16 11.4878 +
Assinatura de funções e a notação Curry
Para conhecer o tipo de uma função, disponível na biblioteca do HUGS ou construída pelo programador, basta usar, no ambiente HUGS, o comando:
Hugs> :t <nome da função>
Exemplos
Hugs> :t sqrtsqrt :: Floating a => a -> aHugs> :t sinsin :: Floating a => a -> aHugs> :t absabs :: Num a => a -> aHugs> :t modmod :: Integral a => a -> a -> aHugs> :t divdiv :: Integral a => a -> a -> a
Exemplo: média aritmética de três números reais
definição: ma3 x y z = (x + y + z)/3 assinatura: ma3 :: xx notação curry:
toda função tem sempre um único parâmetro de entrada a aplicação de uma função sobre um parâmetro produz uma nova função assinatura: ma3 ::
Máquina Funcional
ma3 3 4 5 “(x + y + z)/3” 4 5 “( 3 + y + z)/3” 4 5 “(3 + 4 + z)/3” 5 “(3 + 4 + 5)/3” “(7 + 5)/3” “12/3” 4
Exercícios:1) Avalie as expressões abaixo e apresente a sequência de reduções necessáriaspara a obtenção do termo irredutível (resultado final):
a. mod 15 2b. mod 15 2 + div 6 3c. ma3 5 10 2d. sqrt (15 – 2*3) / (17 – 12)
2) Defina na linguagem Haskell as funções abaixo. Use, quando achar adequado, definições locais:
a. Determinação da área de um retângulo de lados a e bb. Determinação da área de um círculo de raio rc. Determinação da média aritmética de três números a, b e cd. Determinação da distância entre dois pontos