gpt4 book ai didi

haskell - 当条件为真时,如何在列表中添加内容,而在 Haskell 中什么都不做?

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

我希望找到一种更好的方法来解决我在 Haskell 中遇到的问题。

给定一个列表和一个条件,创建一个仅包含满足条件的元素的新列表。下面是我使用的解决方案。是否有更好的替代方案不涉及可能?

eg :: (Eq  a, Num  a) => (a -> Bool) -> [a] -> [a]
eg cond i = catMaybes (map (\x-> if cond x then Just x else Nothing) i)

最佳答案

您的 eg 相当于 filter :: (a -> Bool) -> [a] -> [a] .事实上,您可以过滤:

filter (\x -> some_condition x) my_list

例如,如果 some_condition 是一个简单的 a -> Bool 函数,这等同于:

filter some_condition my_list

eg 的实现和带过滤器的实现都不需要 Eq aNum a 顺便说一句:可以简单地对 cond x 的结果使用守卫或模式匹配。

过滤器implemented with explicit recursion [src] :

filter :: (a -> Bool) -> [a] -> [a]
filter _pred [] = []
filter pred (x:xs)
| pred x = x : filter pred xs
| otherwise = filter pred xs

这里对于一个空列表,它因此返回空列表,当列表不为空时,它只会在满足 pred x 的情况下添加 x

关于haskell - 当条件为真时,如何在列表中添加内容,而在 Haskell 中什么都不做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70822010/

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