Untitled
unknown
haskell
2 years ago
1.3 kB
21
Indexable
module Main (main) where
-- Decide se todos os valores lógicos de uma lista são True
and2 :: [Bool] -> Bool
and2 [] = True
and2 (x:xs) = x && and2 xs
-- Concatena uma lista de listas
concat2 :: [[a]] -> [a]
concat2 [] = []
concat2 (xs:xss) = xs ++ concat2 xss
-- Produz uma lista com n valores idênticos
replicate2 :: Int -> a -> [a]
replicate2 0 _ = []
replicate2 n x = x : replicate2 (n-1) x
-- Seleciona o enésimo elemento de uma lista
(!!!) :: [a] -> Int -> a
(!!!) (x:_) 0 = x
(!!!) (_:xs) i = (!!!) xs (i-1)
-- Verifica se um valor é um elemento de uma lista
elem2 :: Eq a => a -> [a] -> Bool
elem _ [] = False
elem2 e (x:xs) = e == x || elem2 e xs
-- Retorna o menor elemento de uma lista
minimo :: Ord a => [a] -> a
minimo (x:xs) = minimo' x xs
where
minimo' mi [] = mi
minimo' mi (y:ys)
| mi <= y = minimo' mi ys
| otherwise = minimo' y ys
minimo2 (x:xs) = foldr min x xs
-- Descarta a primeira ocorrência de um elemento numa lista
descarta :: Eq a => a -> [a] -> [a]
descarta _ [] = []
descarta e (x:xs)
| e == x = xs
| otherwise = x : descarta e xs
-- Selection sort
selectionSort :: Ord a => [a] -> [a]
selectionSort [] = []
selectionSort [x] = [x]
selectionSort xs = m : selectionSort (descarta m xs)
where
m = minimo xs
main :: IO ()
main = do
putStrLn "hello world"
Editor is loading...