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