gpt4 book ai didi

haskell : Filtering a list of strings

转载 作者:行者123 更新时间:2023-12-02 00:28:50 25 4
gpt4 key购买 nike

我有一个要过滤的字符串列表。我的前提是字符串应该以大写字母开头。

例如。当我运行 onlyLowercase ["boy", "girl", "Hi"]

它应该给我一个 ["boy", "girl"]

的列表

我可以使用模式匹配和守卫来做到这一点,但我使用的是 learnyouhaskell ( 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"] 的列表。

我想知道是否有一种方法可以使用字符串中的第一个字符来过滤我的字符串列表(无需创建任何可以检查字符串并在第一个字母为小写时返回 true 的辅助函数)。

我也试过用

 onlyLowercase2 (x:xs) = filter (isLower head x) : onlyLowercase2 xs

但那甚至没有编译。基本上,我只是想弄清楚如何在列表列表中使用过滤器函数。预先感谢您提供的任何帮助。

最佳答案

感谢 Willem Van Onsem 关于使用 lambda 表达式作为过滤函数的建议,我进一步阅读并提出了这个两行解决方案。

onlyLowercase2 :: [String] -> [String]
onlyLowercase2 = filter (\st-> ("" /= st) && (isLower $ head st))

不确定它是否完美,但至少它在工作。

关于 haskell : Filtering a list of strings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52691646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com