# HG changeset patch # User Markus Kaiser # Date 1352660514 -3600 # Node ID 50f08a46ea107298a1bfb5841fd4bb13db0ee98d # Parent f4d71c6df64cd748c10f03d1b1221e3b6c9f990c week 2 homework diff -r f4d71c6df64c -r 50f08a46ea10 exercises/src/Exercise_2.hs --- a/exercises/src/Exercise_2.hs Fri Nov 09 13:01:37 2012 +0100 +++ b/exercises/src/Exercise_2.hs Sun Nov 11 20:01:54 2012 +0100 @@ -84,33 +84,54 @@ {---------------------------------------------------------------------} {- Aufgabe H2.1 -} +factorial :: Integer -> Integer +factorial 0 = 1 +factorial n = n * factorial (n - 1) + factorials :: [Integer] -> [Integer] -factorials ns = undefined +factorials ns = [factorial n | n <- ns, n >= 0] + +prop_factorialsDistrib cs cs' = + factorials (cs ++ cs') == factorials cs ++ factorials cs' +prop_factorialsOne n = factorials [n] == (if n < 0 then [] else [factorial n]) +prop_factorialsNil = factorials [] == [] count :: [Char] -> Char -> Integer -count cs c = undefined +count cs c = genericLength [c' | c' <- cs, c' == c] + +count' :: [Char] -> Char -> Integer +count' cs c = sum [1 | c' <- cs, c' == c] {---------------------------------------------------------------------} {- Aufgabe H2.2 -} lookupTab :: [Integer] -> [(Integer, [Char])] -> [[[Char]]] -lookupTab keys tab = undefined +lookupTab keys tab = [[v | (k,v) <- tab, key == k] | key <- keys] {---------------------------------------------------------------------} {- Aufgabe H2.3 -} wordsOfLength :: [Char] -> Integer -> [[Char]] -wordsOfLength alphabet n = undefined +wordsOfLength alphabet 0 = [[]] +wordsOfLength alphabet n = [[a] ++ s | a <- alphabet, s <- wordsOfLength alphabet (n - 1)] {---------------------------------------------------------------------} {- Aufgabe H2.4 -} -{-WETT-} perms :: [Char] -> [[Char]] -perms [] = undefined -perms xs = undefined -{-TTEW-} +perms xs | xs == "" = [""] + | otherwise = + reverse (sort (nub ([ys ++ [y] | + y <- xs, ys <- perms (delete y xs)]))) + +perms' :: [Char] -> [[Char]] +perms' "" = [""] +perms' xs = [ys ++ [y] | y <- sort $ nub xs, ys <- perms' $ delete y xs] + +perms'' :: [Char] -> [[Char]] +perms'' "" = [""] +perms'' xs = reverse [y : ys | y <- sort $ nub xs, ys <- perms'' $ delete y xs] \ No newline at end of file