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

Attachment: extras.scm.diff
Description: Binary data

_______________________________________________
Chicken-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to