什么是Prolog中“表现良好的谓词”?

时间:2018-03-26 12:52:37

标签: prolog

SWI documentation多次提到“对于表现良好的谓词,不留任何选择点。”我是否可以认为,对于确定性或半决定性的“表现良好的谓词”,在找到答案后应该没有剩下的选择点? 表现良好的谓词的定义是什么?它不在glossary

我希望它的意思是“按预期的方式工作”,但我没有找到明确定义明确的定义。

澄清:

这是SWI文档中的用法:

  • 确定性谓词是必须完全成功的谓词 一次,对于表现良好的谓词,不要留任何选择点。

这是确定性谓词的定义:

  • 确定性谓词是必须完成一次并且不留任何选择点的谓词。

for well behaved predicates显然是打算以某种方式更改定义的含义,为什么要添加它呢?

可能的答案:

正如@DanielLyons指出的那样,表现良好部分可能意味着“按预期工作”,而在plunit这意味着您必须将[nondet, fail]之类的标记传递给表明测试谓词应该的行为方式。谓词可以在功能上起作用,但是给出多个解决方案,其中单个预期,反之亦然,然后不再匹配标记的预期行为并生成警告。

1 个答案:

答案 0 :(得分:4)

我看到的这种结构的所有出现都在plunit文档中,并且指的是确定性或半确定性(单一解决方案或0/1解决方案)谓词。这里的含义似乎是,如果它产生一个单一的解决方案并留下一个选择点,你可以调用一个谓词确定性(所以你得到一个成功的统一,但可能会有更多的尝试肯定会失败)。与半确定性谓词相同的故事(但可能仅在他们发现单一成功的情况下)。

我不认为这是一个定义明确的术语。产生单一结果的谓词不应该不必要地留下选择点,但是由于某种原因,也许并不仅仅依赖于这种行为并且它只是警告你它。 Prolog无法真正了解或跟踪您的谓词是否具有确定性。其他语言,特别是水星,可以。但是这里的区别似乎是一种关注,可能是为了避免产生关于测试失败的虚假错误信息。