At Sun, 25 Sep 2005 14:38:50 +0000, Mario Domenech Goulart wrote: > > I'm confused about the behavior of hash tables in compiled code. > > $ cat ht.scm > (let ((ht (make-hash-table string=?))) > (hash-table-set! ht "a" "b") > (print (hash-table-ref ht "a")))
[...] > #;1> (use ht) > ; loading ./ht.so ... > #f The default hash procedure doesn't seem to handle literal strings correctly. If you were to use non-literals it would work: (let ((ht (make-hash-table string=?))) (hash-table-set! ht (string #\a) "b") (print (hash-table-ref ht (string #\a)))) In the interpreter there's no special notion of a literal value, hence the difference. You can fix it by manually providing the hash function: (let ((ht (make-hash-table string=? string-hash))) (hash-table-set! ht "a" "b") (print (hash-table-ref ht "a"))) Or with the attached patch to extras.scm. -- Alex
extras.scm.diff
Description: Binary data
_______________________________________________ Chicken-users mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/chicken-users
