1

スキームのeqv-hashtableデータ構造は、文字列であるキーを認識していないようです。次のコードでは、eqv-hashtableを作成し、新しいデータを作成しています。

(define state-hash (make-eqv-hashtable))
(hashtable-set! state-hash "S" (State "S" #f '() '()))

ただし、データがハッシュテーブルに格納されているかどうかを確認しようとすると、次のことが発生します。

(hashtable-contains? state-hash "S")  ; --> #f

手順hashtable-contains?は、キー"S"が現在ハッシュテーブルにないことを示していますが、以下はそうでないことを示唆しています。

(hashtable-keys state-hash)   ; --> #("S")

キーに文字列以外のもの、たとえば記号(eg 'S)を使用しても、問題はありません。文字列をキーとして使用したくない理由はありますか?

4

2 に答える 2

3

eqv?#t引数がまったく同じオブジェクトを参照している場合にのみ戻ります。これを試して:

(define key "S")
(define state-hash (make-eqv-hashtable))
(hashtable-set! state-hash key (State "S" #f '() '()))
(hashtable-contains? state-hash key)
于 2013-02-22T22:05:10.497 に答える