[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
> 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|