Untitled

mail@pastecode.io avatar
unknown
haskell
a year ago
1.3 kB
17
Indexable
Never
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"