问题标签 [logical-purity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
215 浏览

prolog - 在 SWI-Prolog 中正确 unify_with_occurs_check/2?

得到了这种奇怪的行为。我正在运行这些测试用例:

现在我得到了这些结果,其中的结果s2是错误的。结果在两个方面是错误的,第一个_3434被触发,第二个unify_with_occurs_check成功:

_3434不应该从 ISO 核心标准中的 7.3.2 Herband 算法中触发。根据条款 7.3.2 f) 1) 变量 X 到项 t 的实例化仅在其 X 不在 t 中出现时传播。

根据第 7.3.2 g) 节,统一应该失败。因此,在 SWI-Prolog 中,诸如 freeze/2、dif/2 等各种形式的属性变量似乎会干扰 unify_with_occurs_check。

任何解决方法?

编辑 06.02.2021:
错误已在 SWI-Prolog 8.3.17 (devel) 中修复,并且
也向后移植到 SWI-Prolog 8.2.4 (stable)。

0 投票
1 回答
256 浏览

prolog - 如何为所有参数模式实现列表项删除?

下面的 Prolog 程序定义了一个谓词deleted/3,用于从传入第二个参数的列表中删除所有出现在第一个参数中的项目,并导致在第三个参数中传递的列表:

  1. 它适用于此参数模式下的查询:
  1. 它也适用于这种参数模式下的查询:
  1. 它也适用于这种参数模式下的查询:
  1. 它也适用于这种参数模式下的查询:
  1. 它也适用于这种参数模式下的查询:
  1. 它也适用于这种参数模式下的查询:
  1. 但它会在这种参数模式下通过查询耗尽资源:
  1. 它还会在此参数模式下通过查询耗尽资源:

如何为所有参数模式实现列表项删除?