<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Eli Barzilay schreef:
<blockquote cite="mid17282.1645.767556.971883@cain.cs.cornell.edu"
 type="cite">
  <pre wrap="">On Nov 20, Hans Oesterholt-Dijkema wrote:
  </pre>
  <blockquote type="cite">
    <pre wrap="">Is it possible to extend the equal? operator for new (structure)
types in mzscheme?
    </pre>
  </blockquote>
  <pre wrap=""><!---->
If you need this for objects in your OO system, then why don't you
implement your own equality predicate using the class system?
(Especially given your reasons for why the standard solutions don't
work.)

  </pre>
</blockquote>
Hmm. I don't know If I follow you here. But no, I'm not interested in
an equal? <br>
predicate for my OO system currently. I am interested in an equal?
predicate for<br>
my datastruct library (sets, avl trees, etc). <br>
<br>
<blockquote cite="mid17282.1645.767556.971883@cain.cs.cornell.edu"
 type="cite">
  <pre wrap="">

On Nov 20, Hans Oesterholt-Dijkema wrote:
  </pre>
  <blockquote type="cite">
    <pre wrap="">Oh, and is it maybe also possible to extend eq?  I'd like eq? to
work differently for persistent roos objects, comparing their Object
Identifiers instead of their "memory" locations.
    </pre>
  </blockquote>
  <pre wrap=""><!---->
You don't want to do that!  Making `eq?' do anything else is going to
be confusing anyone who sees your code.
  </pre>
</blockquote>
I do want to do this, because the semantics are right. Look here:<br>
<tt><br>
&gt; (define store (list (list 2 3 4) (list 5 5 9)))<br>
&gt; (define (search n)<br>
&nbsp;&nbsp;&nbsp;&nbsp; (define (in n L)<br>
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; (if (null? L)<br>
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; #f <br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; (if (= n (car L))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; #t<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; (in n (cdr L)))))<br>
&nbsp;&nbsp;&nbsp;&nbsp; (define (f L)<br>
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; (if (null? L)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; #f<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; (if (in n (car L))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; (car L)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; (f (cdr L)))))<br>
&nbsp;&nbsp; &nbsp; (f store))<br>
<br>
&gt;(define a (search 4))<br>
&gt;(define b (search 4))<br>
&gt;(eq? a b)<br>
#t<br>
</tt><br>
Now the equivalent operation in Persistent ROOS<br>
<br>
<tt>&gt; (psearch (= (my-class my-attribute) 4))<br>
(#roos #roos #roos)<br>
&gt; (define a (car (psearch (= (my-class my-attribute) 4))))<br>
&gt; a<br>
#roos<br>
&gt; (define b (car (psearch (= (my-class my-attribute) 4))))<br>
&gt;b<br>
#roos<br>
&gt; (eq? a b)<br>
#f<br>
&gt; (peq? a b)<br>
#t<br>
</tt><br>
Although the memory locations of the returned roos objects are
different,<br>
they are actually the same, in the backend system. The Object IDentifier<br>
of a and b adhere (= a b).<br>
<br>
Best whishes,<br>
<br>
Hans<br>
<br>
<br>
<br>
</body>
</html>