haskell (é uma função polimorfica) laboratório

15
Haskell (é uma função polimorfica) Laboratório Rafael Borges [email protected]

Upload: isabella-fuentes

Post on 02-Jan-2016

50 views

Category:

Documents


1 download

DESCRIPTION

Haskell (é uma função polimorfica) Laboratório. Rafael Borges [email protected]. 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 :? - PowerPoint PPT Presentation

TRANSCRIPT

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

Haskell(é uma função

polimorfica)Laboratório

Rafael [email protected]

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

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

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

Hugs: Comandos:quit

Sai do Hugs

:? Exibe a ajuda do Hugs

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

Hugs: ExpressõesO Hugs pode computador o valor de expressões Haskell. Basta apenas digitá-las no console.

> 2+35

> head [3,2,1]3

> tail [3,2,1][2,1]

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

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)

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

Hugs: TiposToda expressão de Haskell (fortemente checada) tem um tipo associado e o Hugs permite descobri-lo através do comando :type

> :t 2+32 + 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 tailtail :: [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)

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

Exercício: TiposEncontre 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)]

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

Exercício: TiposEncontre 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 Numsum :: 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 tiposfst :: (a,b) -> a

elem funçao que recebe todos os tipos de Eq tem q possuir a função igual:t elemelem :: 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 flipflip :: (a -> b -> c) -> b -> a -> c Exemplo: flip elem[1,2,5] 2 True flip elem "abc"'a'True

flip elem :t flip elemflip elem :: Eq a => [a] -> a -> Bool

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

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

:reloadRecarrega o último arquivo

:cd <dir>Modifica a pasta de trabalho

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

Exercício: Arquivos

Carregue o arquivo exercicio.hs e calcule as seguintes expressões:

square 2allEqual 2 3 4allEqual 1 1 1allEqual (square 2) (square (-2)) 4maxi (square 2) 3

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

Exercício: Arquivos

Modifique o arquivo exercicio.hs, incluindo as seguintes funções:

fat :: Int -> IntCalcula n!

all4Equal :: Int -> Int -> Int -> Int -> BoolCompara se quatro números são iguais

all4Equal :: Int -> Int -> Int -> Int -> BoolMesmo que anterior, mas usando a definição de allEqual

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

Exercício: Sales

Modifique o arquivo sales.hs, incluindo as seguintes funções:

maxSales :: Int -> IntDada uma semana n, retorna a semana com

maior número de vendas entre 0 e n

totalSales :: Int -> IntDada uma semana n, retorna a soma das

vendas entre as semanas 0 e n

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

Exercício: Sales

Modifique o arquivo sales.hs, incluindo as seguintes funções:

howManyWeeksDado 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 -> FloatDada uma semana n, calcula a média de

vendas entre 0 e n

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

Exercício: StringsDefina as seguintes funções:

makeSpaces :: Int -> StringProduz uma String com n espaços vazios

pushRight :: Int -> String -> StringAdicionar n espaços a uma String (deve usar makeSpaces)

howManyWeeksDefina essa função (incluindo seu tipo) que, dado um valor de

vendas, determine quantas semanas entre 0 e a fornecida tiveram essa vendagem.

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

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)