SWI documentation多次提到“对于表现良好的谓词,不留任何选择点。”我是否可以认为,对于确定性或半决定性的“表现良好的谓词”,在找到答案后应该没有剩下的选择点? 表现良好的谓词的定义是什么?它不在glossary。
我希望它的意思是“按预期的方式工作”,但我没有找到明确定义明确的定义。
澄清:
这是SWI文档中的用法:
这是确定性谓词的定义:
for well behaved predicates
显然是打算以某种方式更改定义的含义,为什么要添加它呢?
可能的答案:
正如@DanielLyons指出的那样,表现良好部分可能意味着“按预期工作”,而在plunit
这意味着您必须将[nondet, fail]
之类的标记传递给表明测试谓词应该的行为方式。谓词可以在功能上起作用,但是给出多个解决方案,其中单个预期,反之亦然,然后不再匹配标记的预期行为并生成警告。
答案 0 :(得分:4)
我看到的这种结构的所有出现都在plunit文档中,并且指的是确定性或半确定性(单一解决方案或0/1解决方案)谓词。这里的含义似乎是,如果它产生一个单一的解决方案并留下一个选择点,你可以调用一个谓词确定性(所以你得到一个成功的统一,但可能会有更多的尝试肯定会失败)。与半确定性谓词相同的故事(但可能仅在他们发现单一成功的情况下)。
我不认为这是一个定义明确的术语。产生单一结果的谓词不应该不必要地留下选择点,但是由于某种原因,也许并不仅仅依赖于这种行为并且它只是警告你它。 Prolog无法真正了解或跟踪您的谓词是否具有确定性。其他语言,特别是水星,可以。但是这里的区别似乎是一种关注,可能是为了避免产生关于测试失败的虚假错误信息。