From 1f33246d13fdc722c17a3c5a10aed373848b78ec Mon Sep 17 00:00:00 2001 From: Matthias Wisniowski Date: Sun, 6 May 2012 15:56:23 +0200 Subject: Aufgabe 5, 1 --- AufgabeFFP5.hs | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 AufgabeFFP5.hs (limited to 'AufgabeFFP5.hs') diff --git a/AufgabeFFP5.hs b/AufgabeFFP5.hs new file mode 100644 index 0000000..d84307c --- /dev/null +++ b/AufgabeFFP5.hs @@ -0,0 +1,50 @@ +module AufgabeFFP5 +where + +import Data.Array + +newtype Table a b = Tbl (Array b a) + deriving Show + +newTable :: (Ix b) => [(b, a)] -> Table a b +newTable l = Tbl (array (lo, hi) l) + where + indices = map fst l + lo = minimum indices + hi = maximum indices + +findTable :: (Ix b) => Table a b -> b -> a +findTable (Tbl a) i = a ! i + +updTable :: (Ix b) => (b, a) -> Table a b -> Table a b +updTable p@(i, x) (Tbl a) = Tbl (a // [p]) + +dynamic :: (Ix coord) => (Table entry coord -> coord -> entry) -> (coord, coord) -> (Table entry coord) +dynamic compute bnds = t + where + t = newTable (map (\coord -> (coord, compute t coord)) (range bnds)) + +------------------------------------------------------------------------------- + +bndsAS :: Array Int Int -> ((Int, Int), (Int, Int)) +bndsAS a = ((l,l), (h,h)) + where + (l,h) = bounds a + +compAS :: Array Int Int -> Table Int (Int, Int) -> (Int, Int) -> Int +compAS a t (i,j) + | i == j = a ! j + | i (Int, Int) -> Int +asDyn a (i,j) = findTable t (i,j) + where + t = dynamic (compAS a) (bndsAS a) + +-- maximum function for tables +tblMax :: Table Int (Int,Int) -> Int +tblMax (Tbl a) = maximum $ elems a + +mas :: Array Int Int -> Int +mas a = tblMax $ dynamic (compAS a) (bndsAS a) -- cgit v1.2.3