[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: XQuery/XPath 3.1: Node List to Node Set ("distinct

Subject: Re: XQuery/XPath 3.1: Node List to Node Set ("distinct nodes")
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 29 Dec 2021 18:33:29 -0000
Re:  XQuery/XPath 3.1: Node List to Node Set ("distinct
> So given this expression:
>
> fold-left($nodes, (), function($a, $n) { $a, $n except $a })
>
> I understand this to be iterating over $nodes from left to right, applying
the function function($a, $n) to each node, where $a is the next node and $n
is the accumulated value (being the result returned by the function on each
invocation).
>
> The b$a, $n except $ab in the function body constructs a new sequence of
($a, $n), excluding $a if it is already in $n. This sequence is then passed as
the second parameter of the next invocation of the function. This has the
effect of preserving the order of input node list.
>

Almost but not quite. $a is the set of distinct nodes found so far, $n is the
node currently being examined. So ($n except $a) is the node currently being
examined if it isn't present in $a, and is the empty sequence otherwise.

As Dimitre says, ($n except $a) where $n is a singleton isn't immediately
intuitive - but intuition takes practice!

As it happens, Saxon probably does a better job of optimizing the more complex
expression $n[not(. intersect $a)] -- though it's still O(n*m).

Michael Kay
Saxonica

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.