[Bug 23643] Convenient operator for transform expressions

https://www.w3.org/Bugs/Public/show_bug.cgi?id=23643

Michael Kay <mike@saxonica.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mike@saxonica.com

--- Comment #3 from Michael Kay <mike@saxonica.com> ---
We (or the user) could define a function 

modify($n as node(), $f as updating function($n as node())) {
  copy $m := $n
  modify $f($m)
  return $m
}

and then you could write

for $e in //item[@status ne 'up-to-date']
return element updated { modify($e, function($n) {insert node <sub/> into $n})
}

This would be even more attractive if we had a terser syntax for inline
functions. In FtanSkrit I used 

{$1 + $2}

for a function that adds its two arguments (i.e. our "function ($n, $m) {$n +
$m}"). We've decided to use a bare "{" for maps, but we could still go with
something like {= $1 + $2 }, the leading '=' being familiar to spreadsheet
users - or even just a leading '=' without the curlies:

for-each($seq, =($1 + 1))

and then Christian's example becomes

for $e in //item[@status ne 'up-to-date']
return element updated { modify($e, =insert node <sub/> into $1)}

I think we should be trying to build new capability by exploiting higher-order
functions wherever we can, in preference to inventing new higher-order
operators.

-- 
You are receiving this mail because:
You are the QA Contact for the bug.

Received on Monday, 28 October 2013 11:37:27 UTC