문제

"사전"유형 -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를 대신 사용할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top