[xquery-talk] tail recursive identity transformation

Kendall Shaw kshaw at kendallshaw.com
Fri Sep 15 01:30:46 PDT 2017


I don't remember seeing an xquery function that tries to return it's 
input unchanged.

Can this be improved:

declare function local:id($e as element()?, $acc as element()?) as 
element() {
   if (empty($e)) then
     $acc
  else
     local:id(()
             , element {node-name($e)} {
               $e/@*
               , for $node in $e/node()
                 return typeswitch($node)
                          case element() return local:id($node, $acc)
                          default return $node
             })
};

The idea is that functions that do more than return their input could be 
based on the function, and benefit from tail call optimization.

Kendall




More information about the talk mailing list