Mercurial > 12ws.info2
changeset 10:50f08a46ea10
week 2 homework
author | Markus Kaiser <markus.kaiser@in.tum.de> |
---|---|
date | Sun, 11 Nov 2012 20:01:54 +0100 |
parents | f4d71c6df64c |
children | a721abd5a135 |
files | exercises/src/Exercise_2.hs |
diffstat | 1 files changed, 29 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- 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