1 / 15

Haskell (é uma função polimorfica) Laboratório

Haskell (é uma função polimorfica) Laboratório. Rafael Borges rmb2@cin.ufpe.br. 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. Hugs: Comandos. :q uit Sai do Hugs :?

Download Presentation

Haskell (é uma função polimorfica) Laboratório

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Haskell(é uma função polimorfica)Laboratório Rafael Borgesrmb2@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:\hugs98ou 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 <arquivo> 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 <dir> 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 ntiveram 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)

More Related