首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog、fail和do not backtrack

Prolog、fail和do not backtrack
EN

Stack Overflow用户
提问于 2010-05-23 23:48:24
回答 4查看 5K关注 0票数 4

在SWI-Prolog中有没有内置的断言总是会失败并阻止机器回溯--它会立即停止程序的执行(这不是fail/0所做的)?我可以使用裁剪,但我不喜欢它们。

做像!, fail这样的事情对我来说不是问题,但为了实现我想要的,我必须在更多的地方使用cuts,这是我不喜欢的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-05-24 06:02:57

你可以使用异常。基于你的问题--这应该会有帮助。参考link

票数 7
EN

Stack Overflow用户

发布于 2010-05-23 23:58:20

你可以使用明确设计的机制来帮助你完成一些事情,但你不喜欢它?

你总是可以使用not,这是cut fail的语法糖

票数 4
EN

Stack Overflow用户

发布于 2010-05-24 08:38:33

脑海中浮现出两种选择:

  1. 在您想要控制的代码中传递一个backtrack(true)backtrack(false)术语,并在您正在编写的谓词的定义中解释它,如果它设置为backtrack(false),将很快失败;如果设置为backtrack(true),则继续。请注意,这实际上不会阻止回溯;它应该只会启用快速失败。即使您的证明树很深,这也应该提供一种快速的方法来防止对backtracking.
  2. Use异常执行某些代码,正如@Xonix (+1)所建议的那样。抛出异常将立即终止证明树构造,并且您可以通过异常将任何术语数据传递到处理程序,从而绕过任何更多的执行-它可能会比第一种方法更快,但可能不像第一种方法那样可移植。

就我个人而言,我以前用过这两种方法--第一种方法在编写代码之前就预料到了需要,而后者我没有。

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

https://stackoverflow.com/questions/2892393

复制
相关文章

相似问题

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