-- Aufgabe 1:
-- Schreibe ein Funktion die zwei Ganzzahlen erwartet und "gleich"
-- zurückgibt, wenn die beiden gleich sind, sonst "ungleich"
equals :: Int -> Int -> String
equals a b | a == b    = "gleich"
           | otherwise = "ungleich"


-- Aufgabe 2:
-- Schreibe eine Funktion, die das erste Element einer Liste zurück-
-- gibt, sowie eine Funktion, die alle restlichen Elemente (also alle
-- bis auf das erste) zurückgibt.
first :: [a] -> a
first (x:xs) = x

mytail :: [a] ->  [a]
mytail (x:xs) = xs



-- Aufgabe 3:
-- Schreibe eine  Funktion, die Überprüft, ob das erstes Element einer
-- Liste von Ganzzahlen kleiner ist als das zweite (boolsche Rückgabe)

comp :: [Int] -> Bool
comp (a:b:xs) | a < b      = True
              | otherwise = False


-- Aufgabe 3:
-- Schreibe eine Funktion die die Anzahl Element in einer Liste zurück-
-- gibt.
count :: [a] -> Int
count [] = 0
count (x:xs) = 1 + (count xs)



-- Aufgabe 4:
-- Schreibe eine Funktion, die zählt wie oft ein bestimmtes Element in
-- einer Liste vorkommt
countelem :: Eq a => [a] -> a -> Int
countelem [] a = 0
countelem (x:xs) a | x == a    = 1 + (countelem xs a)
                   | otherwise = countelem xs a



-- Aufgabe 5:
-- Schreibe eine Funktion, die eine Liste umdreht.
myrev :: [a] -> [a]
myrev list = myrev' list []

myrev' [] l = l
myrev' (x:xs) l = myrev' xs (x:l)



-- Aufgabe 6:
-- Zahlenwertberechnung Berechnung nach dem Horner-Schema:
--    neues Ergebnis = altes Ergebnis * Basis + Ziffer
horner :: Int -> [Int] -> Int
horner base digits = horner' base (myrev digits) 

horner' base [] = 0
horner' base (x:xs) = (horner' base xs) * base + x