> Das hab ich immer noch nicht hinbekommen. > Hat das schon wer? > Hier ist mal das, was ich bis jetzt habe: > > klammerInhalt :: [a] -> [a] > klammerInhalt xs = tail (init (xs)) > > isGeklammert :: Eq a => a -> a -> [a] -> Bool > isGeklammert o s xs = (head xs == o) && (last xs == s) > > isHtmlKlammer :: [[Char]] -> Bool > isHtmlKlammer = isGeklammert "" "" > isHeadKlammer :: [[Char]] -> Bool > isHeadKlammer = isGeklammert "" "" > isTitleKlammer :: [[Char]] -> Bool > isTitleKlammer = isGeklammert "" "" > isMetaKlammer :: [[Char]] -> Bool > isMetaKlammer = isGeklammert "" "" > isBodyKlammer :: [[Char]] -> Bool > isBodyKlammer = isGeklammert "" "" > > > listeBis :: Eq a => a -> [a] -> [a] > listeBis _ [] = [] > listeBis e (x:xs) > | e == x = [x] > | otherwise = x : listeBis e xs > > > anfKlammer :: (Eq a, Show a) => a -> a -> [a] -> [a] > anfKlammer _ _ [] = [] > anfKlammer o s (x:xs) > | notInList s xs = error("Uebungsblatt_06.anfKlammer: > Klammerungsfehler: " ++ show (xs) ++ " enthält die > schließende Klammer " ++ show s ++ " nicht.") > | o == x = x : listeBis s xs > | otherwise = error ("Uebungsblatt_06.anfKlammer: > Klammerungsfehler: " ++ show (x:xs) ++ " beginnt nicht > mit " ++ show o ++ ".") > > > trenneAnfKlammernAb :: String -> String -> Char -> > [String] -> [[String]] > trenneAnfKlammernAb _ _ _ [] = [[]] > trenneAnfKlammernAb o s a (x:xs) > | a == '1' = > if x == o && inList s xs then > let ak = anfKlammer o s (x:xs) in > ak : [drop (length ak - 1) xs] > else [x:xs] > | a == '*' = > if x == o && inList s xs then > let ak = anfKlammer o s (x:xs) in > ak : trenneAnfKlammernAb o s a (drop (length ak - 1) xs) > else [x:xs] > | a == '+' = > if x == o && inList s xs then > let ak = anfKlammer o s (x:xs) in > ak : trenneAnfKlammernAb o s '*' (drop (length ak - 1) > xs) > else error ("Uebungsblatt_06.trenneAnfKlammernAb: Aktion > " ++ show a ++ ": Klammerpaar " ++ show o ++ " - " ++ > show s ++ " nicht in " ++ show (x:xs) ++ " enthalten.") > | otherwise = error > ("Uebungsblatt_06.trenneAnfKlammernAb: Aktion " ++ show a > ++ " nicht definiert.") > > > > > hatBodyKlasse _ = True > hatHeadKlasse _ = True > > > checkHTML :: String -> Bool > checkHTML s = let w = words s > i = klammerInhalt w in > isHtmlKlammer w && hatHeadKlasse i && hatBodyKlasse i