Buscar

Programação Funcional em Haskell

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 30 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Linguagens de Programação II
Profa. Lívia Naiara de Andrade
Programação Funcional
• Um comando em Haskell é uma fórmula escrita na 
sintaxe da linguagem.
– soma x y = x + y
• Em Haskell existem várias funções pré-definidas 
que podem ser usadas para a construção de 
expressões
– sum[1..10]
– sqrt 9
– reverse “Alô Mundo!!”
Algumas Funções
Criando Funções
• As suas funções devem ser definidas em scripts e devem 
obedecer à sintaxe:
• nome_função :: tipo_arg1 -> ... -> tipo_argN -> tipo_saída
• nome_função arg1 ... argN = <expressão_resultado>
• Exemplo de criação de funções:
soma:: Int-> Int -> Int
soma x y = x + y
Criando Funções
• Exemplo de criação de funções:
idade :: Int
idade = 18
maiorDeIdade :: Bool
maiorDeIdade = (idade>=18)
Foi definida uma 
constante do tipo inteiro
maiorDeIdade = (idade>=18)
idadeTeste :: Int -> Bool
Idade n = n>=18
Criou uma função que usa a 
definição criada anteriormente
Criou uma função que recebe 
um valor inteiro e retorna um 
valor booleano.
Criando Funções
• Exemplo de criação de funções:
quadrado :: Int -> Int
quadrado x = x * x
Recebe um valor inteiro e 
retorna o dobro do valor.
mini :: Int -> Int -> Int
mini a b
| a <= b = a
| otherwise = b
Recebe dois valores inteiro e 
retorna o menor deles.
Guards - são expressões booleanas iniciadas por uma barra |.
Se o valor de a é menor ou igual que b a resposta é a, senão passa-
se para o próximo guard.
A expressão otherwise, que sempre possui a resposta se todos os 
outros guards falharem.
Inteiros
• O tipo Int é o tipo dos números inteiros em 
Haskell. Este tipo possui alguns operadores e 
funções:
> Maior que
>= Maior ou igual
== Igual
/= Diferente
<= Menor ou Igual
< Menor
Números em Ponto Flutuante
• O tipo Float trabalha com números fracionários 
que são representados em ponto flutuante.
• O tipo Float além de aceitar os operadores vistos 
anteriormente, possui algumas funções próprias:
/ Float -> Float -> Float Divisão
*** Float -> Float -> Float Exponenciação, x ** x = xy
show Float -> String Converte um número para uma 
string
read String -> Float Converte uma string representando 
um real, em seu valor
sqrt Float -> Float Raiz quadrada
fromInt Int -> Float Converte um Int para um Float
pi Float Constante Pi
Booleanos
O tipo Bool é o tipo dos valores booleanos True
(Verdadeiro) ou False (Falso).
Símbolo Operadores Booleanos
&& e
|| ou
not negação
Caracteres ou Strings
• Char é o tipo composto de caracteres, dígitos e 
caracteres especiais. Caracteres individuais são 
escritos entre aspas simples: 
‘a’ é o caracter a e ‘7’ é o caracter sete.
• Existem funções que transformam um número em 
caracter, e um caracter em número inteiro, 
baseando-se na tabela ASCII. 
chr :: Int -> Char
ord :: Char -> Int
Caracteres ou Strings
• Listas de caracteres pertencem ao tipo String, e 
podem ser representados entre aspas duplas
• Ex.:
Haskell> “Haskell é\nLegal !!”Haskell> “Haskell é\nLegal !!”
“Haskell é
Legal”
• Listas podem ser concatenadas usando o operador (++). 
Haskell > “Preciso de” ++ “ frases “ ++ “ melhores”
“Preciso de frases melhores”
Caracteres ou Strings
• Listas de caracteres pertencem ao tipo String, e 
podem ser representados entre aspas duplas
• Ex.:
Haskell> “Haskell é\nLegal !!”Haskell> “Haskell é\nLegal !!”
“Haskell é
Legal”
• Listas podem ser concatenadas usando o operador (++). 
Haskell > “Preciso de” ++ “ frases “ ++ “ melhores”
“Preciso de frases melhores”
Sinônimos
• A linguagem Haskell permite que se de sinônimos 
aos nomes de tipos. 
• Ex.:
type Quantidade = Int
preco :: Quantidade -> Float -> Float
preco a b = a * b
Haskell> preco 2 2.55
5.1
Funções Recursivas
• Grande parte das definições em Haskell serão 
recursivas, principalmente as que necessitam de 
algum tipo de repetição. Uma definição recursiva 
clássica é a do fatorial de um número inteiro positivo.
• O fatorial de um número inteiro positivo pode ser 
dividido em dois casos:
– O fatorial de 0 será sempre 1;
– E o fatorial de um número n>0, será 1 * 2 *...* (n-1) * n
Tuplas
• Uma tupla em Haskell é uma agregação de um ou 
mais componentes. Estes componentes podem ser de 
tipos diferentes.
• O tipo de uma tupla parece uma tupla, mas possui 
tipos como componentes.
Haskell > verIdade (“André”, 21)
Tuplas e Listas
Tuplas e Listas
• A linguagem Haskell nos fornece dois mecanismos 
para a construção de dados compostos: tuplas e 
listas.
• Numa tupla podemos combinar os componentes de • Numa tupla podemos combinar os componentes de 
um dado numa única estrutura, e os componentes 
podem ter tipos e propriedades distintas.
• A lista possibilita a reunião de vários elementos -
todos do mesmo tipo - numa única estrutura.
Algumas Tuplas
• Uma tupla é uma sequência ordenada de n 
elementos e possui as propriedades:
– pode conter mais de uma vez o mesmo elemento.
– os elementos são representados obrigatoriamente na 
ordem dada.
Funções fst e snd para Duplas
• As funções fst (first) e snd (second) podem ser 
utilizadas para recuperar os valores armazenados em 
duplas:
> fst (2,5)> fst (2,5)
2
> fst (True, “Erro”)
True
> Snd (5, “Bom Dia”)
“Bom Dia”
Teste com fst e snd
• As funções fst (first) e snd (second) podem ser 
usadas de forma combinada. Por exemplo, para 
recuperarmos o número 4 na tupla abaixo
((True, 4),"Bom")
Podemos escrever: 
> snd (fst ((True, 4),"Bom") )
4
Operações com Tuplas
Exemplo Biblioteca
• No modelo dos dados de uma biblioteca, podemos 
representar cada objeto livro através dos atributos: 
código, título, autor, editora, ano de publicação.
• Uma tupla permite a combinação desses atributos de 
tipos diferentestipos diferentes
• Exemplo de uma tupla representando um livro numa 
biblioteca:
("H123C9","Haskell","Thompson","Pearson",1999)
Exemplo Biblioteca
• As tuplas abaixo representam diferentes livros:
E os valores do atributos (em cada livro) são do tipo:
Definição de Tipo
• Podemos definir novos tipos de dados em Haskell, 
e cada tipo novo deve ser nomeado. Para o 
exemplo dos livros, podemos escrever:
type Livro = (String, String, String, String, Int) 
l1,l2 :: Livro
l1 =("H123C9","Haskell","Thompson","Pearson",1999)
l2 = ("H214C5","Haskell","Sa","Novatec",2006)
Exemplo Biblioteca
Parei slide11 de 17
Arquivo pdf HASKELL 3 Tuplas.pdf
Exemplo Biblioteca
Exemplo Biblioteca
Exemplo Biblioteca
Exemplo Biblioteca
Exercício

Continue navegando