2

次のような関数を書く必要があります

replaceSubtrie :: SSTrie -> Data.Word.Word8 -> SSTrie -> SSTrie
replaceSubtrie trie base subtrie = ???

ここで、の値に応じてbase、サブトライはさまざまな方法でトライに挿入されます。SSTrieは私自身のデータ型であり、その操作方法は知っていますが、Word8の値を処理する方法がわかりません。

baseByteStringから取得された単一の「文字」(「文字」の特定の値)です。具体的には、これはindexByteStringを呼び出した結果です。これが、Word8と宣言した唯一の理由です。

利用可能なWord8コンストラクターがないため、パターンマッチングを実行できません。また、Word8定数を作成して比較する方法がわからないため、ガードを機能させることができません。


[編集]ジェロームの提案はうまくいった。しかし、より一般的には、バイト文字列(およびその他のより低レベルのデータ)を操作する方法を示す優れた記事はありますか?たとえば、Word8についてその事実をどうやって知ることができたのでしょうか。


[編集-ドン・スチュワートへの質問]

今、私はそれをこのようなコードで動作させています

replaceSubtrie trie 0x41 subtrie = trie{ a=subtrie }

これに変更すると:

replaceSubtrie trie 'A' subtrie = trie{ a=subtrie }

エラーが発生します:

Trie.hs:40:21:
Couldn't match expected type `Word8' with actual type `Char'
In the pattern: 'A'
In an equation for `replaceSubtrie':
    replaceSubtrie trie 'A' subtrie = trie {a = subtrie}

import qualified Data.ByteString.Char8 as Cファイルの先頭にあります。私は何が間違っているのですか?

4

1 に答える 1

1

「A」のASCII値を調べるのはちょっとばかげている気がしますが、一体何

Data.ByteString.Char8 または Data.ByteString.Lazy.Char8 をインポートするだけで、すべて同じ関数を取得できますが、パターンで文字リテラルを使用できます。

于 2012-11-19T12:50:46.263 に答える