Haskell过滤多个char

时间:2015-01-20 10:55:47

标签: haskell

我有一个问题。我在这里有这行代码。

map length [filter (/= ' ') someString]

我知道它会从someString中删除空格。但是可以使用过滤器从字符串中删除多个空格吗?我们只想删除空格和其他一些字符。

谢谢!

3 个答案:

答案 0 :(得分:4)

你可以这样做:

filter (not . flip elem "<your chars here>")

示例:

ghci> filter (not . flip elem " .,") "This is an example sentence, which uses punctuation."
"Thisisanexamplesentencewhichusespunctuation"

只需将评论放在此处:要过滤掉两种情况(a-z和A-Z)的字母,您应该使用Data.Char&#39; isLetter函数。

答案 1 :(得分:4)

稍微短一点的方法是使用notElem

λ> filter (flip notElem " f") "foo bar"
"oobar"

答案 2 :(得分:1)

另一种方法是使用折叠来获取长度,如果您实际上不需要返回已过滤的字符串但只想要其长度。

f x charlist = foldl (\acc x -> if not $ x `elem` charlist then acc + 1 else acc) 0 x

charlist是您禁止使用的字符列表。如果总是有固定列表,可以直接将其定义为顶级值,并在函数体中使用它,而不是将其作为参数传递。

使用列表推导的更简洁版本:

f x = length [z | z <- x, notElem z charlist]