首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是Prolog中的“行为良好的谓词”?

什么是Prolog中的“行为良好的谓词”?
EN

Stack Overflow用户
提问于 2018-03-26 12:52:37
回答 1查看 113关注 0票数 3

SWI文档多次提到“对于行为良好的谓词,没有选择点”。我是否可以把这理解为,对于“行为良好的谓词”,无论是确定性的还是半确定性的,在找到答案之后就不应该有选择点了吗?行为良好的谓词的定义是什么?它不在术语表里。

我希望它的意思是“工作就像预期的那样工作”,但我还没有找到一个明确的定义。

为求澄清:

这是SWI-文档中的用法:

  • 确定性谓词是必须成功一次的谓词,对于行为良好的谓词,不留下任何选择点。

这就是确定性谓词的定义:

  • 确定性谓词是必须成功一次且没有选择点的谓词。

for well behaved predicates显然是为了改变定义的含义,为什么还要添加它呢?

可能的答案:

正如@DanielLyons所指出的,行为良好的部件可能意味着“按预期工作”,而在plunit中,这意味着您必须传递诸如[nondet, fail]之类的标志,以指示测试的谓词应该如何运行。谓词可以在功能上工作,但是给出多个解决方案,其中一个是预期的,反之亦然,这样就不再匹配标记的、预期的行为并生成警告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-26 15:17:34

我看到的所有这种构造都出现在plunit文档中,并引用确定性或半确定性(单解或0/1解决方案)谓词。这里的含义似乎是,如果谓词产生单个解决方案并留下一个选择点,则可以调用谓词确定性(因此,您得到了一个成功的统一,但可能会有更多肯定会失败的尝试)。半确定性谓词的情况也是如此(但可能只有在他们找到了唯一成功的情况下才会这样)。

我不认为这是一个明确的术语。总是更好的做法是,产生单个结果的谓词不应该不必要地留下选择点,但是可能plunit由于某种原因而依赖于这种行为,而且它只是在警告您注意它。Prolog无法真正知道或跟踪谓词是否是确定性的。其他语言,特别是水星,可以。但是这里的区别似乎是plunit关心的问题,可能是为了避免对失败的测试或什么东西产生虚假的错误信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49491955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档