Ich arbeite eine Aufgabe in Haskell, um für Tests vorzubereiten. Die aktuelle Task fragt nach der folgenden Formel eine Zeichenfolge in Token: Bei der Ausführung von "tokenize str separely remove" sollte es eine Liste von Zeichenfolgen ausgeben. Jedes Zeichen in "str", das in der Zeichenfolge "separate" erscheint, sollte eine Zeichenfolge aus einem Zeichen sein. Jedes Zeichen in "str", das in der Zeichenfolge "remove" erscheint, sollte entfernt werden. Zeichen, die nicht in separater oder remove erscheinen, sollten zusammen gebündelt werden.Rekursive Tokenizer in Haskell
Beispiel zeigt, dass
tokenize "a + b* 12-def" "+-*" " "
ausgeben sollte
["a", "+", "b", "*", "12", "-", "def"]
meinen aktueller Code unter
tokenize :: String -> String -> String -> [String]
tokenize [] _ _ = []
tokenize [x] _ _ = [[x]]
tokenize (x:xs) a b | x `elem` a = [x] : tokenize xs a b
| x `elem` b = tokenize xs a b
| otherwise = (x:head rest) : tail rest
where
rest = tokenize xs a b
Es funktioniert zu einem gewissen Grad, das Problem, dass es zu sein, die Betreiber im Beispiel ist mit dem vorhergehenden Buchstaben gebündelt.
wie diese
["a+","b*","12-","def"]
trotz der Betreiber in der separaten Zeichenfolge sein.
Das Problem liegt in der Zeile '| sonst = (x: Kopfstütze): Schwanzstütze, wo Sie "x" auf "Kopfstütze" haben, egal, was "Kopfstütze" sein mag. – sjakobi