首页 > 解决方案 > ISO-Prolog 处理器合规性的空间/时间要求

问题描述

的所有实现都需要在适用时执行

有这个和/或类似的要求吗?

我很清楚,Prolog 处理器的特性,如第一个参数主函子索引和原子垃圾收集,已被广泛采用,但ISO 标准并未规定

但是呢?

相信某些 Prolog 系统获得了正确的语义,但不保证......

rep.
rep :- !, rep.
rep.

?- rep, false.

...可以在恒定的堆栈空间下永远运行吗?

该系统是否仍符合 ISO-Prolog 标准?

标签: prologiso-prolog

解决方案


每当您阅读标准时,首先要查看其范围(domaine d'application、область применения、Anwendungsbereich)。因此,该标准是否适用于您想知道的内容。在 13211-1:1995, 1 Scope 中有一条注释:

注 - ISO/IEC 13211 的这一部分没有规定:

a) Prolog 文本的大小或复杂性将超过
任何特定数据处理系统或语言处理器的容量,或 超过相应限制
时要采取的措施;


b)能够支持 Prolog
处理器实现的数据处理系统的最低要求;

...

严格来说,这只是一个注释。但是,如果您浏览该标准,您会意识到没有这样的要求。对于类似的情况,另请参阅此答案

此外,资源错误(7.12.2 h)和系统错误可能发生在“任何执行阶段”。

从历史上看,DEC10 的早期实现不包含最后调用优化,程序员投入了大量精力来使用故障驱动循环或启用对数堆栈使用。

在您的示例rep中,符合要求的系统可能空间不足。并且该溢出可能会以资源错误的形式发出信号,但即使这样也不是必需的,因为系统可能会因系统错误而退出。更让我恼火的是下面的程序

rep2 :- rep2.
rep2.

甚至这个程序也可以无限运行而不会耗尽空间!这虽然没有人削减额外的选择点。

总之,回想一下,符合标准只是一个工作系统的先决条件。


推荐阅读