17
Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação Prof.ª Claudia Boeres 2009/1

Introdução à Programação: uma Abordagem Funcional Programação I Engenharia de Computação

  • Upload
    jason

  • View
    38

  • 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

Page 1: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

Introdução à Programação: uma Abordagem Funcional

Programação IEngenharia de Computação

Prof.ª Claudia Boeres

2009/1

Page 2: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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

Page 3: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

Avaliador do ambiente HUGS

Page 4: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

Ambiente HUGS

avaliador: pode ser usado como uma calculadora:

? 3 + 5 * 213? (3 + 5) * 216?

primitivas: funções já existentes em bibliotecas do HUGS

Page 5: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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

Page 6: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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

Page 7: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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.

Page 8: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

Interações do programador com o ambiente de programação

Editor de

textoArquivo texto

com definições de funções

Ambiente Interpretador

HUGSProgramador

Page 9: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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

Page 10: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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

Page 11: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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

Page 12: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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 +

Page 13: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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>

Page 14: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computaçã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

Page 15: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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 ::

Page 16: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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

Page 17: Introdução à Programação:  uma Abordagem Funcional Programação I Engenharia de Computação

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