gpt4 book ai didi

haskell - 使用 mapM/sequence 是否被认为是好的做法?

转载 作者:行者123 更新时间:2023-12-02 01:30:49 26 4
gpt4 key购买 nike

考虑以下示例:

safeMapM f xs = safeMapM' xs []
where safeMapM' [] acc = return $ reverse acc
safeMapM' (x:xs) acc = do y <- f x
safeMapM' xs (y:acc)

mapM return largelist -- Causes stack space overflow on large lists
safeMapM return largelist -- Seems to work fine

使用 mapM在大型列表上会导致堆栈空间溢出,而 safeMapM似乎工作正常(使用 GHC 7.6.1 和 -O2 )。但是我找不到类似于 safeMapM 的函数。在 Haskell 标准库中。

使用 mapM 仍然被认为是好的做法吗? (或 sequence 就此而言)?
如果是这样,为什么尽管存在堆栈空间溢出的危险,但仍将其视为良好做法?
如果不是,您建议使用哪种替代方案?

最佳答案

正如 Niklas B.,mapM 的语义是那些有效的右折叠,它在比翻转版本更多的情况下成功终止。一般情况下,mapM更有意义,因为我们很少会想要在庞大的数据列表上制作结果生成图。更常见的是,我们想要评估这样一个列表的效果,在这种情况下,mapM_sequence_ ,这会丢弃结果,通常是推荐的。

编辑:换句话说,尽管问题中提出了问题,是的 , mapMsequence是常用的,通常被认为是良好的做法。

关于haskell - 使用 mapM/sequence 是否被认为是好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15546216/

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