Re: IEEE 754 floating-point arithmetic is not completely ordered Jens Axel Søgaard (16 Apr 2005 15:53 UTC)
Re: Circular structures [was Re: IEEE 754 floating-point arithmetic is not completely ordered] Jens Axel Søgaard (22 Apr 2005 16:49 UTC)

Re: Circular structures [was Re: IEEE 754 floating-point arithmetic is not completely ordered] Jens Axel Søgaard 22 Apr 2005 16:49 UTC

Bradley Lucier wrote:
> On Apr 16, 2005, at 10:53 AM, Jens Axel Søgaard wrote:

>>>Well, it depends on what your goal is. ...
>>
>>Here are some potential goals:
>>...
>>3) default-compare should define a total order on almost all Scheme
>>values
>
> What is "almost all"?  How do a and b compare in the following?
>
> [descartes:~/programs/folding/2] lucier% gsc
> loading /usr/local/Gambit-C/gambcext.scm
> Gambit Version 4.0 beta 12
>
>  > (define a (cons #f #f))
>  > (set-car! a a)
>  > (set-cdr! a a)
>  > (define b (cons #f #f))
>  > (set-car! b b)
>  > (set-cdr! b b)
>  > (equal? a b)   ;;; doesn't terminate

In the proposal default-compare is not defined on circular structures.
Theoretically I think (I am not sure though) it is possible to
define an order on graphs.

> Is default-compare compatible with equal?

The current proposal for default-compare is:

  (define (default-compare x y)
      (select-compare x y
        (null?    0)
        (pair?    (default-compare (car x) (car y))
                  (default-compare (cdr x) (cdr y)))
        (boolean? (compare-boolean x y))
        (char?    (compare-char    x y))
        (string?  (compare-string  x y))
        (symbol?  (compare-symbol  x y))
        (number?  (compare-number  x y))
        (vector?  (compare-vector default-compare x y))
        (else (error "unrecognized types" x y))))

Which means they are almost compatible :-)

The return value of equal? of two non-eq? symbols with the
same spelling is left unspecified by R5RS where as
default-compare is required to return #t.

Similary the return value of equal? of an exact number
and an inexact number that are numerically equal unspecified.

Apart from that, the domain of default-compare doesn't include
e.g. procedures as equal? does.

--
Jens Axel Søgaard