1

继续通过 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 记忆页面没有给我任何线索。

4

1 回答 1

4

这个问题的讨论应该有助于解释发生了什么:GHC Haskell 中的记忆何时自动?

正如人们在评论中所说,如果 crc32Table 是单态类型的,则应该只计算一次并保留。

于 2011-04-04T13:57:35.637 回答