Hier meine Lösungen zur ersten Klausur in AlP I, soweit ich sie noch erinnere. Mit persönlicher Widmung für Mika. ;-)
Quicksort
`
qsort :: [[a]] -> [[a]]
qsort [] = []
qsort [x] = [x]
qsort (x:xs) = (qsort [y | y <- xs, (length y < length x)])
++ [x]
++ (qsort [y | y = length x)])
`
Durchschnitt
Funktioniert wegen Typ-Problemen leider nicht. Die Division in der ersten Zeile scheint keine zwei unterschiedlichen Parameter zu akzeptieren. `
durchschnitt :: [Double] -> Double -> Double -> Double
durchschnitt l a b = (foldl (+) 0 f) / (length f)
where
f = filter iv l
iv :: Double -> Bool
iv x = (x >= a) && (x <= b)
`
Baum
`
-- a)
data Ord a => BinTree a = Nil | Node a (BinTree a) (BinTree a)
deriving Show
-- b)
find :: Ord a => a -> BinTree a -> Bool
find _ Nil = False
find x (Node y lft rght)
| (x == y) = True
| (x y) = find x rght
-- c)
tree2list :: Ord a => BinTree a -> [a]
tree2list Nil = []
tree2list (Node x lft rght) = (tree2list lft) ++ [x] ++ (tree2list rght)
`
Wechselgeld
`
-- gegeben
coins :: [Int]
coins = [50, 20, 10, 5, 2, 1]
-- gesucht
change :: Int -> [Int]
change 0 = []
change x = coin:(change rest)
where
coin = maximum (filter (x >=) coins)
rest = x - coin
`
Lambda
War Murks, gucke ich mir noch einmal an. :-)