Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMelissa Almeida Viveiros Alterado mais de 8 anos atrás
1
Haskell (é uma função polimorfica) Laboratório Rafael Borges rmb2@cin.ufpe.br
2
Hugs Interpretador de Haskell 98 Suporta todos os recursos da linguagem (exceção: módulos) Para iniciá-lo, execute winhugs em p:\hugs98 ou hugs no terminal
3
Hugs: Comandos :quit Sai do Hugs :? Exibe a ajuda do Hugs
4
Hugs: Expressões O Hugs pode computador o valor de expressões Haskell. Basta apenas digitá-las no console. > 2+3 5 > head [3,2,1] 3 > tail [3,2,1] [2,1]
5
Exercício: Expressões Calcule o valor das seguintes expressões (no Hugs): > sum [1,2,3,4] > product [1,2,3,4] > “abc” ++ “def” > fst (2,3)
6
Hugs: Tipos Toda expressão de Haskell (fortemente checada) tem um tipo associado e o Hugs permite descobri-lo através do comando :type > :t 2+3 2 + 3 :: Num a => a (existe classe de tipo (Polimofismo), o int e float seriam do tipo Num) > :t head [3,2,1] head [3,2,1] :: Num a => a > :t tail [3,2,1] tail [3,2,1] :: Num a => a (=> representa classe de tipo) > :t tail tail :: [a] -> [a] (lista de tipo arbitrario para outra lista de tipo arbitrario) > :t head head :: [a] -> [a] (-> representa função) (lista de tipo arbitrario para outra lista de tipo arbitrario)
7
Exercício: Tipos Encontre expressões cujos tipos são: Char 'a' :: Char [Char] :t ['b'] ['b'] :: [Char] (Int, Int) :t (5, 5) (5,5) :: (Num a, Num b) => (b,a) (Bool, [Char]) :t (True, ['a']) (True,['a']) :: (Bool,[Char]) [(Bool, Char)] :t [(True, 'a')] [(True,'a')] :: [(Bool,Char)]
8
Exercício: Tipos Encontre o tipo das seguintes expressões: head funçao que recebe um tipo lista :t head (entrada de uma lista e retorna o 1º da lista) sum :t sum funçao que recebe que recebe um tipo lista de Num sum :: Num a => [a] -> a (O Num restringe a lista) (a lista tem q ser um numeral e usa função adição) fst funçao que recebe um tipo par de variavel de tipo, pq pode receber vários tipos fst :: (a,b) -> a elem funçao que recebe todos os tipos de Eq tem q possuir a função igual :t elem elem :: Eq a => a -> [a] -> Bool (descobrir se um elemento está em uma lista) flip (inverte os parametros da função) (espera uma lista para retornar um caractere) :t flip flip :: (a -> b -> c) -> b -> a -> c Exemplo: flip elem[1,2,5] 2 True flip elem "abc"'a' True flip elem :t flip elem flip elem :: Eq a => [a] -> a -> Bool
9
Hugs: Arquivos :load Carrega o arquivo no Hugs :load "c:\\temp\\exercicio.hs" Reading file "c:\temp\exercicio.hs": Hugs session for: P:\hugs98\lib\Prelude.hs c:\temp\exercicio.hs :reload Recarrega o último arquivo :cd Modifica a pasta de trabalho
10
Exercício: Arquivos Carregue o arquivo exercicio.hs e calcule as seguintes expressões: square 2 allEqual 2 3 4 allEqual 1 1 1 allEqual (square 2) (square (-2)) 4 maxi (square 2) 3
11
Exercício: Arquivos Modifique o arquivo exercicio.hs, incluindo as seguintes funções: fat :: Int -> Int Calcula n! all4Equal :: Int -> Int -> Int -> Int -> Bool Compara se quatro números são iguais all4Equal :: Int -> Int -> Int -> Int -> Bool Mesmo que anterior, mas usando a definição de allEqual
12
Exercício: Sales Modifique o arquivo sales.hs, incluindo as seguintes funções: maxSales :: Int -> Int Dada uma semana n, retorna a semana com maior número de vendas entre 0 e n totalSales :: Int -> Int Dada uma semana n, retorna a soma das vendas entre as semanas 0 e n
13
Exercício: Sales Modifique o arquivo sales.hs, incluindo as seguintes funções: howManyWeeks Dado um valor de vendas e uma semana n, determina quantas semanas entre 0 e n tiveram essa vendagem (defina também seu tipo) averageSales :: Int -> Float Dada uma semana n, calcula a média de vendas entre 0 e n
14
Exercício: Strings Defina as seguintes funções: makeSpaces :: Int -> String Produz uma String com n espaços vazios pushRight :: Int -> String -> String Adicionar n espaços a uma String (deve usar makeSpaces) howManyWeeks Defina essa função (incluindo seu tipo) que, dado um valor de vendas, determine quantas semanas entre 0 e a fornecida tiveram essa vendagem.
15
Exercício: Tipos Defina os tipos Point e Triangle (a partir de Point) e as funções distance (calcula a distância entre dois pontos), midPoint (calcula o ponto médio entre dois pontos) e perimeter (calcula o perímetro do triângulo)
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.