module Exercise_6 where import Data.Ratio import Test.QuickCheck {- Library -- nicht veraendern -} type IList = [(Rational, Rational)] ilist :: Rational -> [Rational] -> IList ilist n (x:y:z:zs) = (s, s + y) : ilist (s + y + z) zs where s = n + x ilist _ _ = [] rationalGen :: Gen Rational rationalGen = do p <- choose (1,10) q <- elements [1,2,3,5,7] return $ p % q ilistGen :: Gen IList ilistGen = do xs <- sized (\size -> resize (3 * size) $ listOf $ rationalGen) return $ ilist 0 xs {- G4 -} partition_fold :: (a -> Bool) -> [a] -> ([a], [a]) partition_fold p = undefined {- H1 -} wellformed :: IList -> Bool wellformed = undefined empty :: IList empty = undefined member :: Rational -> IList -> Bool member x ivls = undefined insert :: (Rational, Rational) -> IList -> IList insert = undefined {- - Wenn man QuickCheck ohne weitere Vorbereitungen aufruft, wird es nur in - Ausnahmefällen eine wohlgeformte Intervallliste erzeugen. Um dennoch - erfolgreich zu testen, haben wir einen sogenannten "Generator" für - Intervalllisten geschrieben. Damit wird QuickCheck vorgegeben, wie Werte - generiert werden sollen. - - Sie können die Tests so schreiben wie immer. Wenn Sie die Tests ausprobieren - wollen, rufen Sie QuickCheck wie folgt auf: - - Angenommen, prop ist eine Property, die als erstes Argument eine - Intervallliste bekommt. Dann schreiben Sie: - - quickCheck (forAll ilistGen prop) -} {- H2 -} foldlMap :: (a -> c -> (b, c)) -> [a] -> c -> ([b], c) foldlMap = undefined {- H3 -} {-WETT-} index1 :: [a] -> Int -> ([Int], Int) index1 as j = undefined {-TTEW-}