## Re: [xsl] () eq () vs () = ()

 Subject: Re: [xsl] () eq () vs () = () From: "G. Ken Holman" Date: Fri, 30 Sep 2011 09:42:03 -0400
s/as the empty set/as the empty sequence/

At 2011-09-30 09:39 -0400, I wrote:
At 2011-09-30 14:28 +0100, Andrew Welch wrote:
>> If () = () is false, then it's intuitive (to me) that deep-equal((),
>> ()) is also false. The one liner saying that it should be true just
>> seems like it could easily say false.
>
> No, that would be wrong/confusing. deep-equal returns true because the
> sequences are the same, = returns false because no items in either sequence
> are equal.

To parapharse:

The sequences are the *same*, but no items in either sequence are equal.

Ok, that takes a little pondering, but I can get that.

So, now that () and () are the same, why does () eq () not return true?

Because eq is in the set of "value comparisons" and there are no values to operate on, thus, no items in either sequence are equal. Functions 3.5.1 says "Value comparisons are used for comparing single values".

Note that you ask "why not true()?", but the return from eq with an empty sequence operand isn't false(). Rather it is () as if to say "there are no comparisons returned from this expression". Converting that to Boolean is false(), but the return itself isn't false(). You only get a true() if there are two singletons and they compare equal. You are getting a non-empty result: a sequence of one value of true(). With either operand as the empty set you are getting a value comparison response of "no response" with (). An empty response.

I think David said it the best and wish I'd thought of saying it that way myself!

. . . . . . . . Ken

```--
Contact us for world-wide XML consulting and instructor-led training
Crane Softwrights Ltd.            http://www.CraneSoftwrights.com/s/
G. Ken Holman                   mailto:gkholman@xxxxxxxxxxxxxxxxxxxx