在SWI-Prolog中,是否有内置谓词可以始终失败并防止机器回溯-即立即停止程序执行(这不是fail/0
的作用)? 我可以使用割,但我不喜欢它们。
像!,fail
这样做对我来说不是问题,但为了实现我想要的功能,我需要在更多位置使用割,这就是我不喜欢的地方。
在SWI-Prolog中,是否有内置谓词可以始终失败并防止机器回溯-即立即停止程序执行(这不是fail/0
的作用)? 我可以使用割,但我不喜欢它们。
像!,fail
这样做对我来说不是问题,但为了实现我想要的功能,我需要在更多位置使用割,这就是我不喜欢的地方。
你可以使用专门设计的机制来帮助你完成某件事情,但你不喜欢它吗?
你总是可以使用not,它是cut fail的语法糖。
backtrack(true)
或backtrack(false)
项,并在你编写的谓词的定义中进行解释,如果它被设置为backtrack(false)
则快速失败,否则继续。请注意,这并不能真正防止回溯;它只应该启用快速失败。即使你的证明树很深,这也应该提供一种快速的方式来防止执行某些代码时出现回溯。