Common LISP의 해시 키로 문자열 객체 사용
-
05-07-2019 - |
문제
"사전"유형 -IE 해시 테이블을 만들려고 노력하고 있습니다. LISP에서 이것이 가능합니까?
나는 이것이 예상대로 작동한다는 것을 알았습니다.
> (setq table (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA46>
> (setf (gethash 1 table) "one")
"one"
> (gethash 1 table)
"one"
그러나 다음은 다음과 같습니다.
> (setq table (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA0E>
> table
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA0E>
> (setf (gethash "one" table) 1)
1
> (gethash "one" table)
NIL
NIL
해결책
'대신'EQL을 사용하는 해시 테이블을 만들어야합니다. 'EQL은 동일한 내용을 가진 두 개의 문자열을't에 평가하지는 않지만 '동일합니다.
다음은 다음과 같습니다.
(make-hash-table :test 'equal)
Skypher가 언급했듯이, 케이스에 민감한 문자열 해싱을 원한다면 'EqualP를 대신 사용할 수도 있습니다.
제휴하지 않습니다 StackOverflow