Запоминание массива Haskell - PullRequest
1 голос
/ 04 апреля 2011

Продолжая изучать CRC с помощью Haskell, я написал следующий код для генерации таблицы для вычисления 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? Страницы воспоминаний на Хаскеле не дали мне никаких подсказок.

1 Ответ

4 голосов
/ 04 апреля 2011

Обсуждение по этому вопросу должно помочь объяснить, что происходит: Когда автоматическое запоминание в GHC Haskell?

Как говорили в комментариях люди, crc32Table, , если он мономорфно типизирован, следует вычислять только один раз и сохранять.

...