[plt-scheme] How to make unit functors?
I think that the proper interpretation of the prose is:
for any values, v1 and v2,
(eq? v1 v2)
=>
(and (number? (eq-hash-code v1))
(number? (eq-hash-code v2))
(= (eq-hash-code v1) (eq-hash-code v2)))
The reverse implication may or may not be true (it's usually true, tho.
Isn't this the usual story for hashing?)
The text goes on to guarantee that this:
(eq? v1 v2)
=>
(and (number? (eq-hash-code v1))
(number? (eq-hash-code v2))
(eq? (eq-hash-code v1) (eq-hash-code v2)))
which, as the text notes, implies that the numbers are fixnums. Another
way to put it:
(eq? v1 v2)
=>
(and (number? (eq-hash-code v1))
(number? (eq-hash-code v2))
(fixnum? (eq-hash-code v1))
(fixnum? (eq-hash-code v2))
(= (eq-hash-code v1) (eq-hash-code v2)))
where fixnum? can (I think) be defined as:
(define (fixnum? n)
(and (number? n)
(exact? n)
(integer? n)
(eq? (- (+ n 1) 1) n)))
I'm not sure why there isn't a fixnum predicate built in (or maybe I
just missed it?)
Robby
At Wed, 28 May 2003 18:35:05 +0200, =?Windows-1252?Q?Jens_Axel_S=F8gaard?= wrote:
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> Matthew Flatt wrote:
>
>
> >> Is the same also true for symbols? That is does it hold for two
> >> symbols s1 and s2 that
> >>
> >> (= (eq-hash-code s1) (eq-hash-code s2)) = (symbol=? s1 s2)
> >>
> >> ?
> >
> > Yes. `symbol=?' is `eq?' with its domain restricted to symbols.
>
> Sorry, I intended to ask this question:
>
> Is the same also true for symbols? That is does it hold for two
> symbols s1 and s2 that
>
> (= (eq-hash-code s1) (eq-hash-code s2)) => (symbol=? s1 s2)
> ?
>
> [otherwise the question is a bit silly]
>
> I interpreted the prose describing eq-hash-code as
>
> For all fixnums f1 and f2:
>
> (= (eq-hash-code f1) (eq-hash-code f2)) => (= f1 f2)
>
> and wanted to know if it also holds for symbols.
>
> --
> Jens Axel Søgaard
>
>