SWI文档多次提到“对于行为良好的谓词,没有选择点”。我是否可以把这理解为,对于“行为良好的谓词”,无论是确定性的还是半确定性的,在找到答案之后就不应该有选择点了吗?行为良好的谓词的定义是什么?它不在术语表里。
我希望它的意思是“工作就像预期的那样工作”,但我还没有找到一个明确的定义。
为求澄清:
这是SWI-文档中的用法:
这就是确定性谓词的定义:
for well behaved predicates显然是为了改变定义的含义,为什么还要添加它呢?
可能的答案:
正如@DanielLyons所指出的,行为良好的部件可能意味着“按预期工作”,而在plunit中,这意味着您必须传递诸如[nondet, fail]之类的标志,以指示测试的谓词应该如何运行。谓词可以在功能上工作,但是给出多个解决方案,其中一个是预期的,反之亦然,这样就不再匹配标记的、预期的行为并生成警告。
发布于 2018-03-26 15:17:34
我看到的所有这种构造都出现在plunit文档中,并引用确定性或半确定性(单解或0/1解决方案)谓词。这里的含义似乎是,如果谓词产生单个解决方案并留下一个选择点,则可以调用谓词确定性(因此,您得到了一个成功的统一,但可能会有更多肯定会失败的尝试)。半确定性谓词的情况也是如此(但可能只有在他们找到了唯一成功的情况下才会这样)。
我不认为这是一个明确的术语。总是更好的做法是,产生单个结果的谓词不应该不必要地留下选择点,但是可能plunit由于某种原因而依赖于这种行为,而且它只是在警告您注意它。Prolog无法真正知道或跟踪谓词是否是确定性的。其他语言,特别是水星,可以。但是这里的区别似乎是plunit关心的问题,可能是为了避免对失败的测试或什么东西产生虚假的错误信息。
https://stackoverflow.com/questions/49491955
复制相似问题