Re: [xsl] XSLT 2.0 courses?

Subject: Re: [xsl] XSLT 2.0 courses?
From: "Liam R. E. Quin liam@xxxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 21 Sep 2020 19:51:48 -0000
On Mon, 2020-09-21 at 19:18 +0000, Graydon graydon@xxxxxxxxx wrote:
> On Mon, Sep 21, 2020 at 07:06:21PM -0000, Dimitre Novatchev 
> dnovatchev@xxxxxxxxxx scripsit:
> > > B  filter($sequence,$function) => head()
> > 
> > Is there any guarantee that the evaluation of filter() will stop as
> > soon as
> > an initial item is produced?
> I wouldn't think there would be, given that filter() in general is
> specified to filter the whole sequence.

In some cases the expression can be rewritten so that filter() is
replaced by $function(head($sequence)); you can only do this if you
know that $function() won't return an empty sequence though, and
$sequence is known at compile time. BaseX does some rewrites in this
vein, although i don't know if it can ever do this one. Oh kinda:

  filter( (1 to 1000), function($input as xs:integer) { $input * 2 } )
=>  head()

Optimized Query:
head((1 to 1000)[((. mod 2) = 0)])

Similarly, head( (1 to 10000) )
is optimized to 
<QueryPlan compiled="true" updating="false">
  <Int type="xs:integer" size="1">1</Int>

I've used languages that had infinite (OK, uunbounded) sequences as
first class objects, with lazy evaluation, which can be a very natural
way to think about cases like this. But we don't have them :)

It's always hard to know how much optimizing to do in what is
essentially an interpreter - at somep point you can spend so long
optimizing that you end up slower. But if the optimized queries can be
reused in production it's another matter...mmodulo errors!

Liam Quin,B
Available for XML/Document/Information Architecture/XSLT/
XSL/XQuery/Web/Text Processing/A11Y training, work & consulting.
Barefoot Web-slave, antique illustrations: B

Current Thread