xquery - XQuery 表达式求值的示例不是顺序的
问题描述
我正在寻找一个示例,它表明 XQuery 表达式评估不是连续的。在将 XQuery 的功能特性与过程语言进行比较时,总是会提到它。
例如在XQuery, 2nd edition中,在下面的部分:
带有 for 子句的 FLWOR 表达式类似于过程语言(例如 C)中的循环。但是,一个关键的区别是在 XQuery 中,因为它是一种函数式语言,所以认为迭代没有特定的顺序。它们不一定顺序发生,一个接一个。
解决方案
通常,该语言的设计使您无法分辨评估顺序是什么,这使得很难证明它不是您所期望的。要观察评估的实际顺序,您需要做一些有副作用的事情,这通常意味着偏离语言规范并使用供应商扩展。例如,您可以使用 EXPath 文件模块并发出对 的调用file:append-text()
,然后检查添加到外部文本文件的条目的顺序。
当然,如果文件中的条目完全按照您期望的顺序,它不会证明任何事情。查询处理器不会仅仅为了好玩而使用不明显的执行顺序。他们只会在通过更改顺序获得一些东西时才会这样做。例如,Saxon 将延迟评估变量,直到它们被使用,并且如果可以的话,会将表达式从循环中取出。但是您会遇到问题,如果您使用具有副作用的函数file:append-text()
来观察这种行为,Saxon 可能会检测到您的代码具有副作用并抑制优化。
推荐阅读
- html - 边框和卡片元素之间的间距
- jasmine - Ngrx单元测试茉莉减速器如何比较状态
- chef-infra - 厨师,在哪里存储食谱/角色的“支持”数据?
- java - 一旦触发 main(),如何找到所有被调用的类?
- soap - 如何调试数据集响应
- azure-devops-server-2019 - 如何向 Azure DevOps 2019 Wiki 更多下拉菜单添加上下文菜单扩展
- postgresql - 调用 .save() 方法后,TypeORM 不会返回整个实体
- asp.net - 错误 MSB3030 无法复制文件“C:\Users\...\WebApi3\obj\Debug\netcoreapp3.0\webapi3.exe”,因为找不到
- python - 构建我的目录和文件路径的字典以选择名称包含特定字符串的所有文件
- python - 用字符串形象地可视化 numpy 布尔数组