The hash tables seem fine to me, but maybe we need a better example. #lang racket
(struct cpd (x y)) (define C1 (cpd 1 "bla")) (define C2 (cpd 1 "bla")) (equal? C1 C2) #f (define ht (make-hash)) (hash-set! ht C1 1) (hash-set! ht C2 2) (equal? (hash-ref ht C1) (hash-ref ht C2)) ;; produces #f On Sat, Dec 28, 2013 at 5:34 PM, Sam Tobin-Hochstadt <sa...@cs.indiana.edu>wrote: > While your answer is what Manfred is looking for, I still find the > original behavior worrying. It lets you expose the internals of opaque data > structures without having the relevant inspector. > > Sam > On Dec 28, 2013 4:16 PM, "J. Ian Johnson" <i...@ccs.neu.edu> wrote: > >> You want to make sure your structs are inspectable. You can define your >> structs with the #:transparent option or define your own equality relation >> with the gen:equal+hash generic interface. >> -Ian >> ----- Original Message ----- >> From: Manfred Lotz <manfred.l...@arcor.de> >> To: users@racket-lang.org >> Sent: Sat, 28 Dec 2013 15:41:28 -0500 (EST) >> Subject: [racket] hash table confusion >> >> I have a hash table (created by using make-hash) where the key is a >> struct. This seems to work fine although the documentation says >> The make-hash procedure creates a table where keys are compared with >> equal?,... >> >> and it seems that equal? gives #f if I compare two structs having the >> same contents: >> >> >> (struct cpd (x y)) >> >> (define C1 (cpd 1 "bla")) >> (define C2 (cpd 1 "bla")) >> >> (equal? C1 C2) >> #f >> >> >> Why does my hash table work fine? In my hash handling I'm using >> make-hash, hash-ref!, hash-set!, hash-for-each. >> >> -- >> Manfred >> >> >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users >> >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users >> > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > >
____________________ Racket Users list: http://lists.racket-lang.org/users