R6RS:翻訳:Standard Libraries:13.1 Constructors

R6RS:翻訳:Standard Libraries:13.1 Constructors

13.1 構築子

[procedure] (make-eq-hashtable)

[procedure] (make-eq-hashtable k)

任意のオブジェクトをキーとして受け付け、それらのキーを eq? で比較する変更可能なハッシュテーブルを新たに割り当てて返す。引き数が与えられた場合、ハッシュテーブルの初期容量がおよそ k に設定される。

[procedure] (make-eqv-hashtable)

[procedure] (make-eqv-hashtable k)

任意のオブジェクトをキーとして受け付け、それらのキーを eqv? で比較する変更可能なハッシュテーブルを新たに割り当てて返す。引き数が与えられた場合、ハッシュテーブルの初期容量がおよそ k に設定される。

[procedure] (make-hashtable hash-function equiv)

[procedure] (make-hashtable hash-function equiv k)

hash-functionequiv は手続きでなければならない。 hash-function はキーをひとつ引き数として取り、非負の正確な整数オブジェクトを返す。 equiv はキーをふたつ引き数として取り、値をひとつ返す。どちらの手続きも make-hashtable の返したハッシュテーブルを変更すべきではない。 make-hashtable はハッシュ関数として hash-function を使いキーを比較するのに使う同値関数に equiv を使う変更可能なハッシュテーブルを新たに割り当てて返す。 3 番目の引き数が与えられた場合には、ハッシュテーブルの初期容量がおよそ k 要素に設定される。

hash-functionequiv も両方ともキーを定義域とする純粋関数のように振る舞うべきである。例えば、 string-hash と string=? 手続きはキーがすべて文字列で、そのどれもがハッシュテーブル内でキーとして使われている間変化しない場合にだけ許容される。さらに、 equiv が真を返す任意の対は hash-function により同一の正確な整数オブジェクトにハッシュされるべきである。

実装系の責任: 実装系は、説明したように、 hash-functionequiv を適用することで行われる期間まで制約を確認しなければならない。

: ハッシュテーブルはハッシュ関数と同値関数の呼び出し結果をキャッシュすることが認められているため、プログラムは毎回の呼び出しや更新で呼び出されているハッシュ関数を信頼することができない。さらに任意のハッシュテーブル操作は、ハッシュ関数を二度以上呼ぶこともある。


Last modified : 2008/10/14 13:37:45 UTC