Записывает сырой двоичный файл в файл в Haskell? - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь сделать кодирование Хаффмана в Haskell, но мне трудно разобраться, как сохранить полученные 1 и 0 как они, а не как строку.До сих пор я читал следующее -

https://wiki.haskell.org/Dealing_with_binary_data

https://wiki.haskell.org/Binary_IO

http://hackage.haskell.org/package/binary-0.10.0.0/docs/Data-Binary.html

- но я все еще довольнозапутался относительно того, как бороться с моей конкретной ситуацией.Точно так же мне трудно понять, как записать древовидную структуру

data HTree = Leaf Char Int
           | Branch HTree HTree Int
             deriving (Show)

, используемую для декодирования данных в файл.(HTree - это структура, которую я использую для хранения дерева Хаффмана).

1 Ответ

0 голосов
/ 22 ноября 2018

Возможно, вы захотите взглянуть на монаду Put в Data.Binary.Put.Вы не предоставили ни одного примера кода, но кое-что для начала:

-- just an example with some made up encoding  

huffmanEncode :: HTree -> Put
huffmanEncode (Leaf c val) = do
    putWord16be 0xf00
    putCharUtf8 c
    putWord32be $ fromIntegral val
huffmanEncode (Branch l r x) = do
    putWord16be 0xbaf
    putWord32be $ fromIntegral x
    huffmanEncode l
    huffmanEncode r

Затем вы бы "запустили" свой кодировщик таким образом: runPut $ huffmanEncode myTree

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...