[英]haskell: filtering Strings with a certain symbol e.g '!' in a List?
[英]Haskell : Filtering a list of strings
我有一个要过滤的字符串列表。 我的判断是该字符串应以大写字母开头。
例如。 当我只运行onlyLowercase ["boy", "girl", "Hi"]
它应该给我一个["boy", "girl"]
的清单
我可以使用模式匹配和防护来做到这一点,但我使用的是Learnyouahaskell( http://learnyouahaskell.com )书,因此我遇到了有关高阶函数的主题。 我阅读了有关过滤器功能的文章,并认为它可以用更少的代码行实现我想做的事情。
使用模式匹配/防护 (效果很好,可以解决我的问题)
onlyLowercase :: [[Char]] -> [[Char]]
onlyLowercase [] = []
onlyLowercase (x:xs)
| isLower (head x) = x : onlyLowercase xs
| otherwise = onlyLowercase xs
使用过滤功能
onlyLowercase2 :: [String] -> [String]
onlyLowercase2 [] = []
onlyLowercase2 (x:xs) = filter isLower x : onlyLowercase2 xs
不幸的是,当我运行onlyLowercase2 ["boy", "girl", "Hi"]
,得到了["boy", "girl", "i"]
。
我想知道是否有一种方法可以使用字符串中的第一个字符过滤字符串列表(而无需创建任何可以检查String并在第一个字母为小写的情况下返回true的辅助函数)。
我也尝试使用
onlyLowercase2 (x:xs) = filter (isLower head x) : onlyLowercase2 xs
但这甚至没有编译。 基本上,我只是想弄清楚如何在列表列表中使用过滤器功能。 预先感谢您提供的任何帮助。
感谢Willem Van Onsem建议使用lambda表达式作为过滤器函数,我进一步阅读并提出了这2行解决方案。
onlyLowercase2 :: [String] -> [String]
onlyLowercase2 = filter (\st-> ("" /= st) && (isLower $ head st))
不知道它是否完美,但至少可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.