A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Haskell (é uma função polimorfica) Laboratório Rafael Borges"— Transcrição da apresentação:

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)


Carregar ppt "Haskell (é uma função polimorfica) Laboratório Rafael Borges"

Apresentações semelhantes


Anúncios Google