Mercurial > 12ws.info2
view exercises/src/Exercise_2.hs @ 5:f1a337c9f260
week 2 tutorial
author | Markus Kaiser <markus.kaiser@in.tum.de> |
---|---|
date | Sun, 28 Oct 2012 18:47:36 +0100 |
parents | 243f6cfa029a |
children | 50f08a46ea10 |
line wrap: on
line source
module Exercise_2 where import Test.QuickCheck import Data.List {---------------------------------------------------------------------} {- Aufgabe G2.1 -} all_sums :: [Integer] -> [Integer] -> [Integer] all_sums xs ys = [x + y | x <- xs, y <- ys] evens :: [Integer] -> [Integer] evens xs = [x | x <- xs, even x] n_lists :: [Integer] -> [[Integer]] n_lists xs = [[1..x] | x <- xs] all_even_sum_lists :: [Integer] -> [Integer] -> [[Integer]] all_even_sum_lists xs ys = [[1..(x+y)] | x <- xs, y <- ys, even (x+y)] {---------------------------------------------------------------------} {- Aufgabe G2.2 -} union'' :: [Integer] -> [Integer] -> [Integer] union'' xs ys = xs ++ ys intersection :: [Integer] -> [Integer] -> [Integer] intersection xs ys = [x | x <- xs, x `elem` ys] -- Alternativ ohne elem: -- intersection xs ys = [x | x <- xs, y <- ys, x == y] diff :: [Integer] -> [Integer] -> [Integer] diff xs ys = [x | x <- xs, not(x `elem` ys)] elem' :: Integer -> [Integer] -> Bool elem' x xs = [y | y <- xs, y == x] /= [] union' :: [Integer] -> [Integer] -> [Integer] union' xs ys = diff xs ys ++ ys {---------------------------------------------------------------------} {- Aufgabe G2.3 -} eq_frac :: (Integer,Integer) -> (Integer,Integer) -> Bool eq_frac (a,b) (c,d) = a * d == c * b intersection_frac :: [(Integer,Integer)] -> [(Integer,Integer)] -> [(Integer,Integer)] intersection_frac xs ys = [x | x <- xs, y <- ys, x `eq_frac` y] {---------------------------------------------------------------------} {- Aufgabe G2.4 -} pow2_slow :: Integer -> Integer pow2_slow 0 = 1 pow2_slow n | n > 0 = 2 * pow2_slow (n - 1) pow2 :: Integer -> Integer pow2 0 = 1 pow2 n | n < 0 = error "Postive n only" | even n = pow2 (n `div` 2) ^ 2 | otherwise = 2 * pow2 (n - 1) {---------------------------------------------------------------------} {- Aufgabe G2.5 -} reachable :: [(Integer, Integer)] -> Integer -> [(Integer, Integer)] reachable graph 0 = nub $ concat [[(u, u), (v, v)] | (u, v) <- graph] reachable graph 1 = graph reachable graph n | n > 0 = [(u, x) | (u, v) <- graph, (w, x) <- reachable graph (n-1), v == w] {---------------------------------------------------------------------} {- Aufgabe H2.1 -} factorials :: [Integer] -> [Integer] factorials ns = undefined count :: [Char] -> Char -> Integer count cs c = undefined {---------------------------------------------------------------------} {- Aufgabe H2.2 -} lookupTab :: [Integer] -> [(Integer, [Char])] -> [[[Char]]] lookupTab keys tab = undefined {---------------------------------------------------------------------} {- Aufgabe H2.3 -} wordsOfLength :: [Char] -> Integer -> [[Char]] wordsOfLength alphabet n = undefined {---------------------------------------------------------------------} {- Aufgabe H2.4 -} {-WETT-} perms :: [Char] -> [[Char]] perms [] = undefined perms xs = undefined {-TTEW-}