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 に答える