Unification, comparison

Raphael Collet raph at info.ucl.ac.be
Wed Jan 4 15:05:51 CET 2006


Filip Konvička wrote:
> I wanted to measure the performance of the comparison operator 
> Value.'==', and I do not understand the results I get.
(...)
> Results:
> T1==T2 finished in 687 ms
> T1==T2 (2) finished in 688 ms
> T1==T3 finished in 78 ms
> 
> TEST1 and TEST2 perform equally, even though T1 is unified with T2 
> before TEST2. Shouldn't TEST2 be as fast as TEST3?

Unification does not merge data structures in memory!  It only performs 
variable bindings to make both values isomorphic.  Therefore T1=T2 has 
no effect on memory, it only checks equality.  T3=T1 is different: it 
binds T3 to the record T1, making T1 and T3 identical references.

You can observe the difference with System.eq, which returns true if 
both arguments are identical references.  {System.eq T1 T2} returns 
false, while {System.eq T1 T3} returns true.

Cheers,
raph




More information about the mozart-users mailing list