函数编程语言方案的所有实现都需要在适用的时候执行尾叫优化。
iso-prolog有此要求和/或类似的要求吗?
在我看来,Prolog处理器的特性,如第一个参数主要函子索引和原子垃圾收集都被广泛采用,但ISO标准并没有规定。
prolog-切割 ,但呢?
请相信某些Prolog系统获得了正确的语义,但并不保证.
rep.
rep :- !, rep.
rep.
?- rep, false...。能用恒定的堆栈空间永远运行吗?
该系统是否仍符合ISO-Prolog标准?
发布于 2019-04-12 14:20:34
每当您阅读一个标准时,首先看看它的作用域(domaine‘’application,областьприменения,Anwendungsbereich)。因此,该标准是否适用于您想知道的内容。在13211-1:1995年,1范围内有一个说明:
注- ISO/IEC 13211的这一部分没有具体说明: a) Prolog文本的大小或复杂性将超过 任何特定数据处理系统或语言的能力 处理程序,或当相应的 超过限额; b)数据处理系统的最低要求 它能够支持Prolog的实现。 处理器;.。
严格地说,这只是一张纸条。但如果你浏览一下标准,你就会意识到没有这样的要求。有关类似情况,请参见这个答案。
此外,资源错误(7.12.2 h)和系统错误可能发生在“执行的任何阶段”。
过去,DEC10的早期实现不包含最后一次调用优化,程序员在使用失败驱动循环或启用对数堆栈使用方面付出了很大的努力。
在您的示例rep中,符合标准的系统可能会耗尽空间。该溢出可能会被一个资源错误所指示,但即使这样也不是必需的,因为系统可能会因系统错误而退出。更让我恼火的是下面的程序
rep2 :- rep2.
rep2.甚至这个程序也可以无限地运行,而不会耗尽空间!虽然没有人切断额外的选择点。
总之,回顾一下,与标准的一致性只是一个工作系统的先决条件。
https://stackoverflow.com/questions/55651136
复制相似问题