Buscar

Progamação funcional

Prévia do material em texto

Sistemas de Informação 
Paradigma Funcional Prof.: Anita Maciel 
 
1 
Construindo funções 1a parte 
 
Programação Funcional 
 
9 Um programa funcional consiste, basicamente, de definições de funções 
(colocadas em um arquivo chamado, genericamente, de script). 
9 Funções simples são usadas para definir outras mais complexas que são, por sua 
vez, utilizadas para definir outras funções ainda mais complexas e etc, etc, etc. 
9 Finalmente, definimos uma função para computar a saída do programa como um 
todo a partir de seus valores de entrada 
 
Definições e Tipos 
 
9 Uma definição fornece um nome a um valor 
 
 
O nome começa com uma letra 
minúscula. Os demais só podem ter 
letras ou algarismos. 
 Tipo especifica que espécie de valor area é 
e tem começar por letra maiúscula. 
 area :: Int 
 area = 41 * 37 
 Uma expressão diz como o valor é 
computado 
 
 
 
 
 
:: significa tem tipo de 
 
 
 
 
 
 
 
Sistemas de Informação 
Paradigma Funcional Prof.: Anita Maciel 
 
2 
Exemplo 
area::Int 
area=34*12 
 
 
9 Uma definição de função especifica como o resultado é computado a partir de 
seus argumentos. 
 
area é o nome da função. Tipo do primeiro argumento(Int), 
tipo do segundo argumento(Int), e 
tipo do resultado(Int), 
 area :: Int->Int->Int 
 area a b = a * b 
Os argumentos são nomes dados após 
o nome da função(a e b). 
Argumentos de funções não precisam 
e, muitas vezes, não podem vir entre 
parênteses! 
 
 O corpo da função especifica como 
o resultado é computado. 
 
 
 
 
 
 
 
 
 
Sistemas de Informação 
Paradigma Funcional Prof.: Anita Maciel 
 
3 
Exemplo 
area :: Int -> Int -> Int 
area a b = a*b 
 
 
 
 
Atenção para a diferença 
aarreeaa 33 44 éé uummaa cchhaammaaddaa ddee ffuunnççããoo 
aarreeaa ((sseemm aarrgguummeennttooss)) éé uumm vvaalloorr ddee ffuunnççããoo 
 
 
Vamos ver outros exemplos. 
 
 
dobro :: Int -> Int 
dobro x = 2*x 
 
Nome da função: dobro 
Tipo do argumento: Int 
Tipo da função: Int 
Nomes dos argumentos: x 
Corpo da função: 2*x 
 
media :: Float -> Float -> Float 
media x y = (x + y) / 2.0 
Nome da função: media 
Tipos dos argumentos: Float e Float 
Tipo da função: Float 
Nomes dos argumentos: x e y 
Corpo da função: (x + y) / 2.0 
 
media :: Float -> Float -> Int 
media x y = ceiling ((x + y) / 2) 
Nome da função: media 
Tipos dos argumentos: Float e Float 
Tipo da função: Int 
Nomes dos argumentos: x e y 
Corpo da função: ceiling ((x + y) / 2) 
Sistemas de Informação 
Paradigma Funcional Prof.: Anita Maciel 
 
4 
 
reajuste::Float->Float->Float 
reajuste s p=s+s*p/100 
Nome da função: reajuste 
Tipos dos argumentos: Float e Float 
Tipo da função: Float 
Nomes dos argumentos: s e p 
Corpo da função: s+s*p/100 
 
 
Definições por Casos 
 
Freqüentemente, programas precisam tomar decisões e computar diferentes resultados em 
diferentes casos. 
Um exemplo clássico e o teste que fazemos para descobrir se uma pessoa é maior de idade. 
 
 Se idade>= 18 então escrever “maior” senão escrver “menor” 
 
 
O Tipo dos Booleano 
Uma condição em Haskell é como na maioria das linguagens: verdadeira ou falsa 
Em Haskell , os tipos booleanos são: 
True, False :: Bool 
 
Os operadores relacionais(>=, <=, >, <,== , /= ) produzem tipos Booleanos 
 
 
Tendo em vista o exposto acima, fica evidente a necessidade da estrutura do if na linguagem 
HASKELL. 
 
As sintaxes: 
 
if teste then …. else .... 
 ou 
if teste1 then …. else if teste2 then .... 
 
Vamos exercitar. 
 
1) Criar uma função que recebe um número e exibe uma das mensagens: Par / Impar. 
parImpar::Int->String 
parImpar a= if mod a 2 ==0 then "Par" else "Impar" 
2) Criar uma função que recebe um número e exibir uma das mensagens: positivo, negativo ou 
nulo. 
 
3) Criar uma função que recebe três números e exibir uma tupla contendo os dois maiores. 
 
Sistemas de Informação 
Paradigma Funcional Prof.: Anita Maciel 
 
5 
4) Criar uma função que receba um número e exiba uma das mensagens: múltiplo de 10 ou 
múltiplo de 5 ou múltiplo de 2 ou não é múltiplo de nenhum deles. 
 
5) Criar uma função que receba dois números e exiba uma das mesnagens: maior eh ... ou 
iguais. 
 
 
Guarda 
 
Entretanto, o número de testes pode ser tão grande que até dificulta a construção do código. 
A linguagem HASKELL apresenta uma solução para esse caso: guarda. 
Sendo assim uma função pode ser definida através de guardas que são expressões booleanas 
associadas à cada equação que define a função. 
Portanto, cada guarda é testada uma por vez, de cima para baixo. 
Para a primeira guarda que for satisfeita a equação correspondente é executada. 
 
 
Veja um exemplo usando guarda. 
 
 
 
Cuidado com o alinhamento e a identação. 
 
Criar uma função para ler três números inteiros e exibir o menor deles. 
 
 
 
 
 
 
 
 
 
 
Sistemas de Informação 
Paradigma Funcional Prof.: Anita Maciel 
 
6 
Resposta ao carregar 
 
 
menor :: Int -> Int -> Int -> Int 
menor x y z 
 | (x <= y) && (x <= z) = x 
 | (y < x) && (y < z) = y 
 | otherwise = z 
 
 
Agora vamos refazer todos os exercícios das páginas 4 e 5 usando guarda. No futuro, você 
decide.
Sistemas de Informação 
Paradigma Funcional Prof.: Anita Maciel 
 
7 
 
Lista de Exercícios 
 
1) Construa uma função que receba quatro valores que representam duas notas e respectivos 
pesos. A função retorna a média ponderada. 
 
2)Construa uma função cujos parâmetros representam a largura, comprimento de um terreno 
retangular e o preço do metro linear. A função retorna o custo total. 
 
3) Construa uma função que receba o dividendo e o divisor e exiba o quociente inteiro da 
divisão e o resto. 
 
4)Construa uma função que receba data no formato ddmmaaa e exiba separados: o dia, mês e 
o ano. 
 
5)Construa uma função que receba três números e exiba o maior. 
 
6) Construa uma função que receba três números e exiba os dois maiores. 
 
7) Construa uma função que exiba n tríades de Pitágoras. 
 
8) Construa uma função que eleva um número a qualquer expoente(potência) 
 
9) Construa uma função que receba uma lista e gere uma nova lista só com os números pares. 
 
10)Construa uma função que receba uma lista e exiba a quantidade de números pares. 
 
11) Construa uma função que gere uma lista com os n primeiros múltiplos de num. 
 
12) Construa uma função que receba um número e gere uma lista com todos os divisores do 
número. 
 
13) Construa uma função que receba um número e exiba a soma dos divisores do número. 
 
14)Construa uma função que receba um número e exiba a quantidade de divisores do número. 
 
15) Construa uma função que receba um número e informe se ele é, ou não, primo. 
 
 
16) Construa uma função que receba um número e informe se ele é, ou não, perfeito. 
 
 
17) Construa uma função que receba uma lista e gere uma nova lista contendo todos os 
números primos da lista 
 
 
Sistemas de Informação 
Paradigma Funcional Prof.: Anita Maciel 
 
8 
 
18) Construa uma função que receba uma lista e gere uma nova lista contendo todos os 
números perfeitos da lista 
 
 
 
 
 
 
 
 
Sistemas de Informação 
Paradigma Funcional Prof.: Anita Maciel 
 
9 
Bibliografia 
 
MUYLAERT, J. Introdução à Programação em Haskell.ppt.Rio: 2001 
 
MUYLAERT, J. Notas de aula. Rio: 2003 
	Construindo funções 1a parte
	Programação Funcional
	Definições e Tipos
	Atenção para a diferença
	Definições por Casos
	Lista de Exercícios

Continue navegando