Haskel - Cola de Prova
Por: Carlos Kalam • 29/11/2019 • Ensaio • 2.065 Palavras (9 Páginas) • 191 Visualizações
/exe1 :: [ Int ]
exe1 = [ x^11 | x <- [1..7] ]
exe2 :: [ Int ]
exe2 = [ x | x <- [1..40], mod x 4 /= 0]
exe3 :: [ String ]
exe3 = [ 'A' : x : "BB" | x <- ['a'..'g'] ]
exe4 :: [ Int ]
exe4 = [ x | x <- [5,8..41], not (elem x [14, 23,
35]) ]
exe5 :: [ Double ]
exe5 = [ x/2 | x <- [2, 1, 0.5, 0.25, 0.125, 0.0625,
0.03125] ]
exe6 :: [ Int ]
exe6 = [ x | x <- [1,10..64] ]
exe7 :: [ Int ]
exe7 = [ x | x <- [2,4..30], not (elem x [6, 14, 20,
26]) ]
exe8 :: [ Char ]
exe8 = [ x | x <- ['@'..'L'], not (elem x ['B', 'F', 'H',
'I', 'K' ]) ]
exe9 :: String -> Bool
exe9 x = even . length $ x
exe10 :: [ String ] -> [ String ]
exe10 x = map (reverse) x
exe11 :: [ String ] -> [ Int ]
exe11 x = [ xn | xn <- map (length) x, mod xn 2 /=
0 ]
exe12 :: String -> Bool
exe12 x = x == reverse x
exe13 :: Int -> (Int, Int, Int, Int)
exe13 x = (x * 2, x * 3, x * 4, x * 5)
data Pergunta = Sim | Nao deriving (Show, Eq)
pergNum :: Pergunta -> Int
pergNum Sim = 1
pergNum Nao = 0
listPergs :: [ Pergunta ] -> [ Int ]
listPergs x = map (pergNum) x
and' :: Pergunta -> Pergunta -> Pergunta
and' Sim Sim = Sim
and' _ _ = Nao
or' :: Pergunta -> Pergunta -> Pergunta
or' Nao Nao = Nao
or' _ _ = Sim
not' :: Pergunta -> Pergunta
not' Nao = Sim
not' Sim = Nao
data Temperatura = Celsius | Farenheit | Kelvin
deriving Show
converterCelsius :: Double -> Temperatura ->
Double
converterCelsius x Celsius = x
converterCelsius x Farenheit = ( x - 32.0 ) / 1.8
converterCelsius x Kelvin = x - 273.15
converterFarenheit :: Double -> Temperatura ->
Double
converterFarenheit x Farenheit = x
converterFarenheit x Celsius = ( x * 1.8 ) + 32.0
converterFarenheit x Kelvin = ( x * 1.8 ) - 459.67
converterKelvin :: Double -> Temperatura ->
Double
converterKelvin x Kelvin = x
converterKelvin x Celsius = x + 273.15
converterKelvin x Farenheit = ( x - 459.67 ) / 1.8
data Jokenpo = Pedra | Papel | Tesoura deriving
Show
match :: Jokenpo -> Jokenpo -> Jokenpo
match Pedra Papel = Papel
match Papel Pedra = Papel
match Tesoura Papel = Tesoura
match Papel Tesoura = Tesoura
match Pedra Tesoura = Pedra
match Tesoura Pedra = Pedra
data Imperiais = Inch | Yard | Foot deriving Show
converterMetros :: Double -> Imperiais -> Double
converterMetros x Inch = x * 0.0254
converterMetros x Yard = x * 0.9144
converterMetros x Foot = x * 0.3048
converterImperial :: Double -> Imperiais ->
Double
converterImperial x Inch = x / 0.0254
converterImperial x Yard = x / 0.9144
converterImperial x Foot = x / 0.3048
data Mes = Janeiro | Fevereiro | Março | Abril |
Maio | Junho | Julho | Agosto | Setembro |
Outubro | Novembro | Dezembro deriving(Show,
Ord, Enum, Eq)
checaFim :: Mes -> Int
checaFim Fevereiro = 28
checaFim Abril = 30
checaFim Junho = 30
checaFim Setembro = 30
checaFim Novembro = 30
checaFim _ = 31
prox :: Mes -> Mes
prox x = toEnum . succ . fromEnum $ x
data Hemisferio = Norte | Sul deriving Show
data Estacoes = Outono | Inverno | Primavera |
Verao deriving Show
estacao :: Hemisferio -> Mes -> Estacoes
estacao Sul Setembro = Primavera
estacao Sul Outubro = Primavera
estacao Sul Novembro = Primavera
estacao Sul Dezembro = Verao
estacao Sul Janeiro = Verao
estacao Sul Fevereiro = Verao
estacao Sul Março = Outono
estacao Sul Abril = Outono
estacao Sul Maio = Outono
estacao Sul Junho = Inverno
estacao Sul Julho = Inverno
estacao Sul Agosto = Inverno
estacao Norte Setembro = Outono
estacao Norte Outubro = Outono
estacao Norte Novembro = Outono
estacao Norte Dezembro = Inverno
estacao Norte Janeiro = Inverno
estacao Norte Fevereiro = Inverno
estacao Norte Março = Primavera
estacao Norte Abril = Primavera
estacao Norte Maio = Primavera
estacao Norte Junho = Verao
estacao Norte Julho = Verao
estacao Norte Agosto = Verao
exe37 :: String -> Bool
exe37 x = x == reverse x
exe38 :: [ Int ] -> [ Int ]
exe38 x = reverse $ [ x | x <- x, mod x 2 /= 0,
mod x 7 /= 0, x >= 0]
exe39 :: String -> String -> String -> (String,
String, String)
exe39 x y z = (reverse x, reverse y, reverse z)
revNum :: String -> Int -> String
revNum s n = reverse(take n s) ++ drop n s
data Binario = Zero | Um deriving Show
data Funcao = Soma2 | Maior | Menor | Mult2
deriving Show
aplicar :: Funcao -> Binario -> Binario -> Binario
aplicar Soma2 Um Um = Zero
aplicar Soma2 Zero Zero = Um
aplicar Soma2 _ _ = Um
aplicar Mult2 Um Um = Um
aplicar Mult2 Zero Zero = Zero
aplicar Mult2 _ _ = Zero
aplicar Maior Zero Zero = Zero
aplicar Maior _ _ = Um
aplicar Menor Um Um = Um
aplicar Menor _ _ = Zero
listBinario :: Binario -> Int
listBinario Zero = 0
listBinario Um = 1
binList :: [ Binario ] -> [ Int ]
binList x = [ listBinario (aplicar Soma2 Um xn) |
xn <- x ]
data Metros = Metros { dimensao :: Int , medida
:: Double} | MetragemInvalida deriving Show
areaQuadrado :: Metros -> Metros
areaQuadrado (Metros 1 l) = Metros 2 (2*l)
...