XQuery表达式评估的示例不是顺序的

TFu*_*uto 3 xquery nonsequential

我正在寻找一个示例,该示例表明XQuery表达式评估不是顺序的。在将XQuery的功能性质与过程语言进行比较时,总是会提到它。

例如,在以下部分的XQuery,第2版中:

FLWOR表达式及其for子句类似于过程语言(例如C)中的循环。但是,一个主要区别是在XQuery中,因为它是一种功能语言,所以认为迭代没有特定的顺序。它们不一定先后顺序发生。

Mic*_*Kay 6

通常,设计该语言的目的是使您无法知道评估顺序是什么,这很难证明它不是您所期望的。要观察评估的实际顺序,您需要做一些有副作用的事情,这通常意味着走出语言规范并使用供应商扩展。例如,您可以使用EXPath文件模块并对发出调用file:append-text(),然后检查添加到外部文本文件中的条目的顺序。

当然,如果文件中的条目与您期望的顺序完全相同,则什么也不会证明。查询处理器不会仅仅出于乐趣而使用非显而易见的执行顺序。他们只有在更改订单有好处的情况下才会这样做。例如,Saxon将延迟对变量的求值,直到使用它们为止,并且如果可以,将表达式从循环中移出。但是,您会遇到一个问题,即如果您使用带有副作用的函数(例如file:append-text()观察这种行为),Saxon可能会检测到您的代码具有副作用并抑制了优化。