小编Rob*_*ung的帖子

我怎样才能获得严格的accumArray?

我有一个键值对列表,我想计算每个键出现的次数以及它出现的值,但是当我尝试时,我得到一个堆栈溢出.这是我正在运行的代码的简化版本:

import Array
add (n, vals) val = n `seq` vals `seq` (n+1,val:vals)
histo = accumArray add (0,[]) (0,9) [(0, n) | n <- [0..5000000]]
main = print histo
Run Code Online (Sandbox Code Playgroud)

当我使用'ghc -O'编译它并运行它时,我得到"堆栈空间溢出:当前大小8388608字节."

我想我知道发生了什么:accumArray与foldl具有相同的属性,所以我需要一个严格版本的accumArray.不幸的是,我发现的唯一一个是Data.Array.Unboxed,它不适用于列表数组.

文档说当累积函数是严格的,那么accumArray也应该是,但我不能让它工作,这里的讨论声称文档是错误的(至少对于GHC).

除了Data.Array.Unboxed中的那个之外,是否有一个严格版本的accumArray?或者有更好的方法来做我想要的吗?

haskell

7
推荐指数
1
解决办法
449
查看次数

标签 统计

haskell ×1