SWI-Prolog中是否有任何内置谓词总会失败并阻止机器回溯 - 它会阻止程序立即执行(这不是fail/0
所做的)?
我可以使用削减,但我不喜欢它们。
做!, fail
这样的事情对我来说不是问题,但为了达到我想要的目的,我必须在更多地方使用剪切,这是我不喜欢的。
答案 0 :(得分:7)
您可以使用例外。根据你的问题 - 它应该有所帮助。 请参阅link
答案 1 :(得分:4)
您可以使用明确设计的机制来帮助您完成某些事情,但您不喜欢它?
你总是可以使用not,这是剪切失败的语法糖
答案 2 :(得分:3)
有两种选择:
backtrack(true)
或backtrack(false)
术语,并在您编写的谓词定义中将其解释为快速失败,如果它设置为{{1如果backtrack(false)
,则继续。请注意,这实际上不会阻止回溯;它应该只启用快速失败。即使您的证明树很深,这也应该提供一种快速的方法来防止在回溯时执行某些代码。就我个人而言,我之前已经使用过这两种方法 - 在编写代码之前我已经预见到需要的第一种方法,后者我没有。
答案 3 :(得分:2)
太糟糕了,这就是削减的目的。