记住Haskell数组

时间:2011-04-04 08:26:39

标签: haskell memoization

继续我通过Haskell查看CRC,我编写了以下代码来生成CRC32计算表:

crc32Table = listArray (0, 255) $ map (tbl 0xEDB88320) [0..255]

tbl polynomial byte = (iterate f byte) !! 8
    where f r = xor (shift r (-1)) ((r .&. 1) * polynomial)

这正确地生成了表格。我想频繁访问此表,但1)不想将结果硬编码为代码,2)不想每次引用时重新计算该表。

我如何在Haskell中记忆这个数组? Haskell的备忘页面没有给我任何线索。

1 个答案:

答案 0 :(得分:4)

这个问题的讨论应该有助于解释发生了什么:When is memoization automatic in GHC Haskell?

正如大家在评论中所说,crc32Table,如果它是单态输入应该只计算一次并保留。