【问题标题】:Filter letters from string replacing symbols for blanks spaces and letters lowercase从字符串中过滤字母,替换空格和小写字母的符号
【发布时间】: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


【解决方案1】:

@Cirdec 就是这样。要获得正确的语法,那就是 map (\c -> if not (isLetter c) then ' ' else c)(注意括号)与map (\c -> if isLetter c then c else ' ')相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 2014-06-20
    • 2021-12-07
    • 2021-01-06
    • 2012-05-31
    相关资源
    最近更新 更多