I have added some features of XPath/XQuery 3.
Most notable anonymous and higher order functions.
E.g. you can calculate the Fibonacci numbers very slowly:
process('', 'let $fibhf := function($fibhf, $i) {'+
' if ($i <= 2) then 1 else $fibhf($fibhf, $i - 2) + $fibhf($fibhf, $i - 1)' +
' }, ' +
' $fib := $fibhf($fibhf, ?)' +
'return for-each(1 to 10, $fib)')
Or not so slowly:
process('', 'let $fibhf := function($fibhf, $count, $prevprev, $prev) { '+
' if ($count eq 0) then ($prevprev)'+
' else $fibhf($fibhf, $count - 1, $prev, $prevprev + $prev)'+
' }, '+
' $fib := $fibhf($fibhf, ?, 0, 1)' +
'return for-each(1 to 1000, $fib)')