----------------------------------------------------------------------
-- Lista 3  -- -- LPG - III                                         --
-- Felipe Gallois                                                   --
-- Esdras Mayrink                                                   --
----------------------------------------------------------------------

-- 1
triangulo x y z
	| x + y <= z || x + z <= y || y + z <= x = print "nao existe"
	| x == y && y == z = print "equilatero"
	| x == y && x /= z = print "isoceles"
	| x == z && x /= y = print "isoceles"
	| y == z && y /= x = print "isoceles"
	| otherwise = print "escaleno"

-- 2
maior :: Ord a => [a] -> a
maior = foldl1 max

-- 3
menor :: Ord a => [a] -> a
menor = foldl1 min

-- 4
nElementos :: [a] -> Int
nElementos = foldl (\n _ -> n + 1) 0

-- 5
somaElementos :: Num a => [a] -> a
somaElementos = foldl (+) 0

-- 6
media :: Fractional a => [a] -> a
media l = soma / numero
	where soma = (foldl (+) 0 l); numero = (foldl (\n _ -> n + 1) 0 l)

-- 7
inverte :: [a] -> [a]
inverte = foldl (flip (:)) []
