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