【发布时间】:2021-03-24 15:41:01
【问题描述】:
编辑: 这个问题假设您启用了发生检查。 不是关于setting Prolog flags。
30 年前有一堆论文关于在安全的情况下自动优化发生检查(大约 90% 的谓词,在典型的代码库中)。提出了不同的算法。现代 Prolog 编译器(例如 SWI Prolog)是否会做类似的事情(当发生检查打开时)?他们喜欢什么算法?
例如,他们会在编译这样的谓词时删除发生检查:
less(0, s(_)).
less(s(X), s(Y)) :- less(X, Y).
(来自下面的讨论this answer)
【问题讨论】:
-
SWI-Prolog 不会自行更改 ISO 标志。在plunit library docs,
sto(Terms)部分,建议See 7.3.3 of ISO/IEC 13211-1 PROLOG: Part 1 - General Core, for a detailed discussion of STO and NSTO
标签: compilation prolog compiler-optimization unification occurs-check