Scheme的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
),我没有任何问题。任何想法为什么它不喜欢字符串作为键?
答案 0 :(得分: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)
答案 1 :(得分:1)
你试过make-equal-hashtable
吗?我对这些经验不多,但我知道
(define str "S")
(eqv? str "S") => #f
(equal? str "S") => #t
编辑:奥斯卡有一个很好的解决方案