Baixe o app para aproveitar ainda mais
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
Compartilhar