【发布时间】:2015-07-16 23:10:13
【问题描述】:
示例:"Paul's! Come There"
获取输出:"paul s come there"
myFilter :: String -> String
myFilter str = unwords . filter (not . null) . map (
map toLower . filter isLetter
) . words $ str
如何将字母过滤成小写,同时用空格替换所有非单词符号?
【问题讨论】:
-
这里有一个提示:
if isLetter x then ... else ... -
是,但采用这种形式:map $ (\c -> if not isLetter c then ' ' else c) 输出:无法将预期类型 'Char -> Bool' 与实际类型 'Bool' 匹配' 函数 'not' 应用于两个参数,但其类型 'Bool -> Bool' 只有一个 表达式中: not isLetter c 表达式中: if not isLetter c then ' ' else c
-
就是这样。要获得与
map (\c -> if isLetter c then c else ' ')相同的map (\c -> if not (isLetter c) then ' ' else c)(注意括号)的语法正确 -
谢谢大家!现在可以了!
-
@Cirdec 把它放在一个答案中!
标签: haskell filter words letter