gpt4 book ai didi

haskell - 使用 foldr 获取符合条件的第一个项目

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

我正在做 self 练习,想知道是否有一种方法可以仅使用 foldr 找到列表中符合特定条件的左起第一项?我希望在找到第一个项目时停止递归(我知道我可能可以结合使用 take)但我很想知道是否可以只使用 foldr?

firstFind (\x -> x > 1000) [] xs 

最佳答案

问题:找到fb

firstFind :: (a -> Bool) -> [a] -> Maybe a
firstFind p list = foldr f b list
where f = ???
b = ???

我们想要:

firstFind p [] = Nothing

但我们也有

firstFind p [] 
= def. firstFind
foldr f b []
= def. foldr
b

从中我们可以看出 b 必须是什么。

进一步,取list = x:xs

firstFind p list
= def. firstFind
foldr f b (x:xs)
= def. foldr
f x (foldr f b xs)
= def. firstFind
f x (firstFind p xs)

现在,我们只需要找到 f 以便它选择第一个匹配项。

回想一下,f 可以依赖于 p。当 p x 为真时,f 应该返回什么?相反的情况呢?

where -- f :: a -> Maybe a -> Maybe a
f x y = ???

(注意:为清楚起见,我在上面写了 f 的类型签名,但您不必将其包含在代码中。如果添加它,但未注释,您将遇到一个类型变量混淆:afindFirst 中的 a 不同,因为它是局部泛化的——因为你才刚刚开始,请忽略它并暂时将其删除。)

关于haskell - 使用 foldr 获取符合条件的第一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25582261/

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