xsl-list
[Top] [All Lists]

RE: [xsl] XSLT 2.0: Are arguments to functions evaluated eagerly or lazily?

2007-07-18 03:00:41
Thanks for that Michael.

At 08:41 AM 18/07/2007 +0100, you wrote:
Supposing you have a function that is passed two arguments, 
say, a condition argument, test, and an argument,  value, 
that returns value if test is true and the empty sequence 
otherwise, is the value argument evaluated at the time of 
calling the function if the test argument is false?  

The spec leaves this question open - the implementation can do either.
Yes, Saxon does so (usually!). There are exceptions, for example if the

Yes, well, I would not expect anything less of Saxon :-)

But for this particular case, I can't see that you're achieving any useful
brevity or abstraction by writing select="f:cond(condition, value)" rather
than select="if (condition) then value else ()".

For a moment just now I thought that I must have had a blond moment when
posing my question with that particular example but now I must be having a
blond moment even considering that I may have had a blond moment!

Of the face of it you are correct but the impetus of my question and the
example is due this functional programming kick that I'm on at the moment.

LISP has two such functions 'cond' and 'if' which do the same thing as my
two examples.  Now I'm not a LISP programmer and maybe there is no
if-then-else statement in LISP which therefore would make necessity for
said functions.  However I can see the usefulness of making such functions
available in a functional  programming style of library for XSLT as these
functions could be used as arguments to the Scheme-like functions foldl,
map, filter et. al.


Justin Johansson
Freelance XML / XSLT / XQuery Developer
Australia

procode(at)tpg(dot)com(dot)au

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--