XSLT 是否支持延迟计算?

Does XSLT support lazy evaluation?

提问人:MrD at KookerellaLtd 提问时间:10/15/2023 更新时间:11/3/2023 访问量:52

问:

我在任何规格中都看不到任何明确的内容。 如果我问 chatgpt,它发明了(非常神奇的)一个名为“xsl:lazy”的未记录的 xslt 命令,这是一个非常明智的提议,但我找不到它实际存在的证据。 当我在氧气中运行代码时,我注意到有时某些变量(我认为是全局变量)看起来好像是懒惰的。

我希望从函数返回的“序列”是惰性的,但我的实验似乎表明它们不是。

(这是使用 saxon PE 10.6)

XSLT-3.0 型

评论

0赞 Martin Honnen 10/15/2023
它是一种声明式语言,它取决于它如何准确地实现 XPath 和 XSLT;我知道撒克逊人会例如内联变量和/或仅在需要的时候/地点评估它们。迈克尔·凯(Michael Kay)肯定会告诉你更多。您还可以在 saxonica.com/documentation10/index.html#!using-xsl/commandline 的文档中搜索“惰性评估”,saxonica.com/documentation10/index.html#!configuration/... 为了便于调试,建议在大多数情况下使用“惰性评估”作为默认值。EAGER_EVALUATION
0赞 MrD at KookerellaLtd 10/15/2023
问题在于,对于大多数计算来说,它在很大程度上是无关紧要的,但我想“修复”一个无界递归,我需要控制评估
0赞 Martin Honnen 10/15/2023
如果有一个具体的例子,你想提高性能或担心性能,那么请发布详细信息。例如,在 XSLT 3 中,为了简化实现尾递归的任务。xsl:iterate

答:

0赞 MrD at KookerellaLtd 11/3/2023 #1

这里的简单答案是也许,但它并不直接在程序员的控制之下。

因此,出于所有实际目的,您需要假设没有。

构建一个懒惰的抽象是可能的,不过,在渴望和懒惰的环境中都是懒惰的。