gpt4 book ai didi

haskell - 一次处理列表 1..n 个元素,无需显式递归

转载 作者:行者123 更新时间:2023-12-02 20:58:32 26 4
gpt4 key购买 nike

我发现自己经常使用一种模式,用一个函数转换列表,该函数消耗列表中的 1..n 个元素并从中产生一些结果。例如

process :: [a] -> [b]
process [] = []
process xs = first : rest
where (first, xs') = consume xs
rest = process xs'

其中 consume 函数使用列表中可变数量的项目并返回结果和剩余的列表项目。我可以在这里使用一些标准的高阶函数而不是显式递归吗?

最佳答案

您需要的功能类似于unfoldr。如果您将您的consume设置为以下形式:

consume' :: [a] -> Maybe (b,[a])

如果 consume' 在空列表的情况下返回 Nothing,否则返回 Just ...。这是一个小包装,捕获该模式:

wrap :: ([a] -> (b,[a])) -> [a] -> Maybe (b,[a])
wrap f [] = Nothing
wrap f xs = Just $ f xs

然后您可以将 consumeunfoldr 结合使用,并使用 consume::[a] -> (b,[a]) 的原始定义 像这样:

unfoldr (wrap consume)

关于haskell - 一次处理列表 1..n 个元素,无需显式递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6160487/

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