2009-09-11 17 views
19

içinde string nesnesini kullanarak string nesnesini kullanarak bir "dictionary" türü oluşturmaya çalışıyorum - yani anahtar olarak bir dizgi içeren karma tablo. Bu mümkün mü yoksa Lisp'de bilge mi? Aşağıdaki AncakCommon Lisp

> (setq table (make-hash-table)) 
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA46> 
> (setf (gethash 1 table) "one") 
"one" 
> (gethash 1 table) 
"one" 

değildir::

> (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 

cevap

31

Sen kullandığı karma-tablo yapmak gerekir 'eşit yerine eğer' EQL

Ben beklendiği gibi çalıştığını fark ettim. 'eql, aynı içeriğe sahip iki dizeyi' t'ye 'değerlendirirken,' eşit yapar '. İşte

bunu nasıl geçerli:

(make-hash-table :test 'equal) 

skypher Eğer küçük harf duyarlı dize karma isterseniz de yerine 'equalp kullanabilirsiniz belirtildiği gibi.

+3

Justicle, CLHS bunu bir örnek olarak görüyor. Belli değilse, belgelere bakmak yardımcı olabilir: http://www.lispworks.com/documentation/HyperSpec/Body/f_mk_has.htm –

+6

Büyük/küçük harfe duyarsız dizgisi karmaşası istiyorsanız EQUALP kullanın. – skypher

+0

Teşekkürler millet. Dokümanları kontrol ettim, ama benimle ilgili herhangi bir şeyi canlandırmak için o bölümün birçok eşitlik fonksiyonuna yeterince dikkat etmedim. "Sadece ihtiyacım olan şeyi yapmalıyım" varsayımı altındaydım (yanlış). – Justicle