方案的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")
如果我使用密鑰以外的字符串,例如符號(例如, 'S
),我沒有任何問題。任何想法爲什麼它不喜歡一個字符串作爲關鍵?
啊,當然。我忘了那個'eqv?'謂詞。這是有道理的。另一種選擇可能是使用'(make-hashtable)',我認爲它可以傳遞不同的謂詞。在這種情況下,我不想對'eqv?'進行測試,但是'相等'。所以也許這是要走的路。 – dtg 2013-02-22 23:55:59
@Dylan沒錯,如果你不需要使用對象_equivalence_來更好地遵守_equality_,它會使事情變得更簡單。乾杯! – 2013-02-22 23:58:01