prolog - ISO-Prolog 处理器合规性的空间/时间要求
问题描述
iso-prolog有这个和/或类似的要求吗?
我很清楚,Prolog 处理器的特性,如第一个参数主函子索引和原子垃圾收集,已被广泛采用,但ISO 标准并未规定。
但是prolog-cut呢?
相信某些 Prolog 系统获得了正确的语义,但不保证......
rep.
rep :- !, rep.
rep.
?- rep, false.
...可以在恒定的堆栈空间下永远运行吗?
该系统是否仍符合 ISO-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.
甚至这个程序也可以无限运行而不会耗尽空间!这虽然没有人削减额外的选择点。
总之,回想一下,符合标准只是一个工作系统的先决条件。
推荐阅读
- python - train_data (1) 的大小不能小于 batch_size (32)
- python - 如何让蛇自己移动?Python
- c - 如何为指针打印空终止字符\ 0
- javascript - 一键式Java脚本图像转换器
- python - 当我在 python 中使用 while 循环运行命令时,我遇到了数量问题
- python - 我的程序可以在我的在线课程的 Python 自动评分器中运行,但不能在 Linux 上运行?
- python - socket连接后可以对受害者的机器进行哪些攻击?
- json - 从 API 获取对象列表反应原生
- python-3.x - python3:来自正则表达式匹配失败的详细错误信息?
- php - Amadeus Flight search api在curl php中传递access_token时出错