haskell (é uma função polimorfica) laboratório
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 PresentationTRANSCRIPT
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:quit
Sai do Hugs
:? Exibe a ajuda do Hugs
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]
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)
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)
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)]
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
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
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
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
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
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
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.
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)