我在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