gpt4 book ai didi

haskell - 展开返回累加器的最后状态

转载 作者:行者123 更新时间:2023-12-02 21:22:56 27 4
gpt4 key购买 nike

Haskell 中的 unfold 函数可以非常方便地创建列表。它的定义是:

unfold :: (b -> Maybe (a, b)) -> b -> [a]

但我想获取所使用的累加器的最后一个值。一个可能的实现是:

unfoldRest :: (b -> Maybe (a, b)) -> b -> ([a], b)
unfoldRest fct ini = go fct ini []
where
go f s acc =
case f s of
Nothing -> (acc, s)
Just (a, b) -> go f b (acc ++ [a])

但我想知道是否没有办法用现有的函数来做到这一点。最后是这样的:

countDown 0 = Nothing
countDown n = Just (n, n-1)
unfoldRest countDown 10

将返回:

([10,9,8,7,6,5,4,3,2,1],0)

因为当累加器值达到0时迭代停止。

最佳答案

import Data.List

unfoldr' :: (b -> Maybe (a, b)) -> b -> [(a, b)]
unfoldr' f = unfoldr (fmap (\(a, b) -> ((a, b), b)) . f)

将为您提供累加器的所有状态。然后您可以选择查看您想要查看的任何内容,包括最后一个。

关于haskell - 展开返回累加器的最后状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23548516/

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