[plt-scheme] How to make unit functors?

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Wed May 28 14:09:57 EDT 2003

At Wed, 28 May 2003 19:21:42 +0200, Jens_Axel_Søgaard wrote:
> I have just checked that even though 'j and 'J are eq?
> then have different hash-codes.

That can't be right. 
 
  > (eq? 'j 'J)
  #t
  > (eq-hash-code 'j)
  511627
  > (eq-hash-code 'J)
  511627

The number will be different on your machine, but both `eq-hash-code'
results have to be the same number.

With case sensitivity, then 'j and 'J are different, and they likely
have different hash codes:

  > #cs(eq? 'j 'J)
  #f
  > #cs(eq-hash-code 'j)
  511627
  > #cs(eq-hash-code 'J)
  511621

Again, the number will be different on your machine. It's possible that
you get the same number from each use of `eq-hash-code' (instead of two
different numbers), but it's exceedingly unlikely.

> My idea about fixnums came from this part
> 
>   The number is an exact integer
>   that is itself guaranteed to be eq? with any value representing the
>   same exact integer (i.e., it is a fixnum).
> 
> and got the idea that hashing a fixnum f would give a value which
> were eq? with any fixnum representing f (and thus also f it self).
> Which implies that (eq? f (eq-hash-code f)).

I see that the docs are confusing, and I'll try to improve it. Robby's
interpretation matches the intent.

As it turns out, `eq-hash-code' is the identity function on "fixnums",
but that wasn't the intent of the documentation (and as you suspect, it
could change in the future).

Matthew



Posted on the users mailing list.