符合ISO-Prolog处理器的空间/时间要求

时间:2019-04-12 11:58:08

标签: prolog iso-prolog

函数编程语言的所有实现都必须在适用时执行

是否有此要求和/或类似要求?

对我来说很明显,Prolog处理器广泛采用了诸如第一个自变量主函子索引和原子垃圾收集 之类的功能,但没有被ISO标准规定。 >

但是呢?

请相信某些Prolog系统可以正确使用语义,但不能保证...

rep.
rep :- !, rep.
rep.

?- rep, false.

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

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

1 个答案:

答案 0 :(得分:3)

每当您阅读标准时,请首先查看其范围(领域应用程序,областьприменения,Anwendungsbereich)。因此,该标准是否适用于您想知道的内容。在13211-1:1995中,1范围有一个注释:

  

注意-ISO / IEC 13211的此部分未指定:

     
    

a)Prolog文本的大小或复杂性将超过
     任何特定数据处理系统或语言的容量
     处理程序,或相应的操作
     超出限制;

         

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

  
     

...

严格来说,这只是一个注释。但是,如果您通过该标准,您将意识到不存在此类要求。对于类似情况,另请参见this answer

进一步,在“执行的任何阶段”都可能发生资源错误(7.12.2小时)和系统错误。

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

在您的示例rep中,符合标准的系统可能空间不足。而且该溢出可能带有资源错误,但由于系统可能会因系统错误而纾困,所以即使这不是必需的。令我更恼火的是以下程序

rep2 :- rep2.
rep2.

即使此程序可能无限运行也不会耗尽空间!而且尽管没有人削减额外的选择点。

总而言之,回想一下,符合标准只是工作系统的前提。

相关问题