继续我通过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的备忘页面没有给我任何线索。
答案 0 :(得分:4)
这个问题的讨论应该有助于解释发生了什么:When is memoization automatic in GHC Haskell?
正如大家在评论中所说,crc32Table,如果它是单态输入应该只计算一次并保留。