From 76e37d28d9489e91b0a6bb0e6c1e648942739737 Mon Sep 17 00:00:00 2001 From: Ivaylo Ivanov Date: Thu, 18 Nov 2021 18:39:32 +0100 Subject: [PATCH] Add correct error checks --- code/Angabe5.hs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/code/Angabe5.hs b/code/Angabe5.hs index b237dc3..cbac42c 100644 --- a/code/Angabe5.hs +++ b/code/Angabe5.hs @@ -27,14 +27,14 @@ class Eq a => Menge_von a where -- Protoimplementierungen leer = [] - vereinige xs ys = xs ++ ys - schneide xs ys = xs \\ (xs \\ ys) - ziehe_ab xs ys = xs \\ (intersectBy (==) xs ys) - ist_teilmenge xs ys = (length (ziehe_ab xs ys) == 0) + vereinige xs ys = if (has_duplicates xs) || (has_duplicates ys) then error "Fehler" else clear_duplicates (xs ++ ys) + schneide xs ys = if (has_duplicates xs) || (has_duplicates ys) then error "Fehler" else xs \\ (xs \\ ys) + ziehe_ab xs ys = if (has_duplicates xs) || (has_duplicates ys) then error "Fehler" else xs \\ (intersectBy (==) xs ys) + ist_teilmenge xs ys = if (has_duplicates xs) || (has_duplicates ys) then error "Fehler" else (length (ziehe_ab xs ys) == 0) ist_obermenge xs ys = ist_teilmenge ys xs ist_element x xs = anzahl x xs >= 1 anzahl x xs = if (has_duplicates xs) then error "Fehler" else (length . filter (== x)) xs - ist_leer xs = xs == leer + ist_leer xs = if (has_duplicates xs) then error "Fehler" else xs == leer sind_gleich xs ys = ist_teilmenge xs ys && ist_teilmenge ys xs -- Weitere Typen: @@ -163,13 +163,10 @@ build_pairs fkt arg -- Aufgabe A.3 instance Menge_von Int where - vereinige xs ys = clear_duplicates (xs ++ ys) instance Menge_von Zahlraum_0_10 where - vereinige xs ys = clear_duplicates (xs ++ ys) instance Menge_von Funktion where - vereinige xs ys = clear_duplicates (xs ++ ys) -- Aufgabe A.4 @@ -188,13 +185,25 @@ instance Show a => Show (ElemTyp a) where -- Aufgabe A.6 instance Eq a => Menge_von (ElemTyp a) where - anzahl x xs = (length . filter (== x)) xs + anzahl x xs = (length . filter (== x)) xs + vereinige xs ys = xs ++ ys + schneide xs ys = xs \\ (xs \\ ys) + ziehe_ab xs ys = xs \\ (intersectBy (==) xs ys) + ist_teilmenge xs ys = (length (ziehe_ab xs ys) == 0) + ist_obermenge xs ys = ist_teilmenge ys xs + ist_leer xs = xs == leer -- Aufgabe A.7 instance (Eq a,Eq b,Eq c,Eq d,Eq e) => Menge_von (PH_ElemTyp a b c d e) where - vereinige xs ys = clear_duplicates (xs ++ ys) -- Aufgabe A.8 instance (Eq p,Eq q,Eq r) => Menge_von (PH_ElemTyp' p q r) where + anzahl x xs = (length . filter (== x)) xs + vereinige xs ys = xs ++ ys + schneide xs ys = xs \\ (xs \\ ys) + ziehe_ab xs ys = xs \\ (intersectBy (==) xs ys) + ist_teilmenge xs ys = (length (ziehe_ab xs ys) == 0) + ist_obermenge xs ys = ist_teilmenge ys xs + ist_leer xs = xs == leer \ No newline at end of file