我在Haskell中工作,爲測試做準備。當前任務要求按以下公式標記字符串: 運行「tokenize str separate remove」時,應該輸出一個字符串列表。出現在字符串「分開」中的「str」中的每個字符應該是一個字符的字符串。出現在「刪除」字符串中的「str」中的每個字符應該被刪除。不分開或刪除的字符應該捆綁在一起。Haskell中的遞歸標記器
實施例顯示,
tokenize "a + b* 12-def" "+-*" " "
應該輸出
["a", "+", "b", "*", "12", "-", "def"]
下面
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
它工作在一定程度上,這個問題是它的運營商在例如我當前的代碼與之前的信件捆綁在一起。
這樣
["a+","b*","12-","def"]
儘管運營商在不同的字符爲。
問題出在''|否則=(x:頭部休息):尾部休息,無論「頭部休息」是什麼,你都在'頭部休息'上放置'x'。 – sjakobi