*some x in $seqA, y in $seqB satisfies x op y*

...where "op" is = or != (or > or < etc)

To demonstrate this take the two sets ('a', 'b') and ('b', 'c'):

$seqA = $seqB returns true because both sets contains 'b'

$seqA != $seqB returns true because setA contains 'a' which is not equal to 'c' in setB

This catches me out a lot, even though I've been caught out before several times. I really have to think hard about what it is exactly that I'm comparing, and still end up getting it wrong.

A simple rules to follow is

**"never use != where both sides are sequences of more than one item"**. 99.9% of the time you won't need to, as much as it feels like the right thing to do.

Below are some of the most common operations on sequences, put together for a reference.

The two sequences are ('a', 'b') and ('b', 'c'), which can be defined in XSLT as:

<xsl:variable name="seqA" select="('a', 'b')" as="xs:string+"/>

<xsl:variable name="seqB" select="('b', 'c')" as="xs:string+"/>

or in XQuery as:

let $seqA := ('a', 'b')

let $seqB := ('b', 'c')

*Select all items in both sequences*

($seqA, $seqB)

Result: a b b c

*Select all items in both sequences, eliminating duplicates*

distinct-values(($seqA, $seqB))

Result: a b c

*Select all items that occur in $seq1 but not $seq2*

$seqA[not(. = $seqB)]

Result: a

*Select all items that occur in both sequences*

$seqA[. = $seqB]

Result: b

*Select all items that do not occur in both sequences*

($seqA[not(. = $seqB)],$seqB[not(. = $seqA)])

or

($seqA, $seqB)[not(. = $seqA[. = $seqB])]

or

($seqA, $seqB)[not(. = $seqA[. = $seqB])]

Result: a c

*Determine if both sequences are identical*

deep-equal($seqA, $seqB)

Result: false

*Test if all items in the sequence are different*

count(distinct-values($seqA)) eq count($seqA)

Result: true

## 2 comments:

Hi

XSLT looks very interesting. I have written a short program in c that is able to solve this Sudoku 2500 times a second. However if I try it with the collection of 34000, 17 clue sudoku available on the web, it can only do 100 per second. I would be happy to share the code since I am sure that it could be greatly improved for better speed. Let me know if anyone is interested.

Garth

I guess you intended to post that against the Sudoku article... For your benefit and everyone else's: the goal was to write a Sudoku solver *using XSLT*. There are countless solvers in other languages, this blog is interested about the ones involving XSLT.

Post a Comment