2

私は本当に SML で HashTable を作成したいのですが、SML/NJ にはこのための構造が既にあるようです。

問題は、それをどのように使用するかです。私は SML で構造体を使用する方法を完全には理解していません。また、私が読んだ本の非常に基本的な例のいくつかでは、修正方法もわからないエラーが発生するため、HashTable 構造体を使用するのは簡単なことかもしれませんが、私は知りません。誰かがこれを説明できれば、それも素晴らしいことです!

私はそれが次のようなものだと考えています:

val ht : string * int HashTable.hash_table = HashTable.mkTable();

???

4

2 に答える 2

4

文字列を整数にマッピングするテーブルを作成するという考えだと思います。次に、その型を次のように記述します(string, int) hash_table(型hash_tableは 2 つのパラメーターを持つ型であり、ML ではそのように記述されます)。

ただし、 に提供する文字列に対するハッシュ関数hash : string -> wordと等価関数も必要です。後者の場合は単純に を使用でき、前者の場合はそれぞれのモジュールから使用できます。eq : string * string -> boolmkTableop=HashString.hashString

そう、

val ht : (string, int) HashTable.hash_table = HashTable.mkTable(HashString.hashString, op=)(17, Domain)

動作するはずです。

ただし、ハッシュ テーブルは過度に使用される傾向があり、多くの場合、間違ったデータ構造であることに注意してください。関数型プログラミングはステートフルなデータ構造であるため、これは特に関数型プログラミングに当てはまります。RedBlackMapFn通常は、SML/NJ ライブラリなどのツリーベースのマップを使用する方が適切です (さらに効率的である可能性もあります) 。

于 2013-11-07T17:45:25.130 に答える