2

ドライブにトライベースの辞書があり、ビットパックされた4バイトのトライノードの連続した配列としてエンコードされています。Pythonでは、次のように4バイト整数の実際の配列に読み取ります。

import array
trie = array.array('I')
try:
    trie.fromfile(open("trie.dat", "rb"), some_limit)
except EOFError:
    pass

Haskellで同じことを行うにはどうすればよいですか(ファイルから配列またはベクトルへの読み取り)?私が思いついた最善の方法は、通常どおりファイルを読み取り、4つのチャンクでバイトを取得し、それらを算術的にマッサージすることですが、これはひどく醜く、エンディアンへの依存ももたらします。

4

1 に答える 1

3

ビットパックされた4バイトのトライノードの連続した配列としてエンコードされます

ここでの「エンコーディング」はPython形式だと思いますか?あなたは「生のCスタイルの配列」と言いますか?

このバイナリ(または他の形式)のデータをHaskellにロードするには、Data.Binaryライブラリを使用して、カスタム形式のBinaryのインスタンスを提供します。

多くの既存のデータ交換フォーマットでは、Hackageにライブラリがありますが、フォーマットを指定する必要があります。たとえば画像データの場合、repa-devilがあります。

真に生のデータの場合は、それをバイト文字列にmmapしてから、さらにデータ構造に処理することができます。

于 2013-03-06T08:42:56.143 に答える