【问题标题】:Why throw an exception in Prolog instead a simple fail?为什么在 Prolog 中抛出异常而不是简单的失败?
【发布时间】:2015-10-06 10:52:50
【问题描述】:

我在 Prolog 中编程,有时我想失败,但我得到了一个异常,我不明白为什么它们之间应该有所不同。如果某事无法执行,则意味着谓词没有成功,所以这是一个简单的失败。我错过了什么吗?

【问题讨论】:

    标签: exception prolog negation-as-failure


    【解决方案1】:

    失败意味着你试图证明的是错误的。异常意味着您尝试证明的内容由于某种原因没有意义(例如,尝试计算原子的平方根),或者您遇到了某些系统限制(例如,耗尽了可用内存)。

    但是您可以通过以下方式轻松地将任何异常转换为失败:

    catch(Goal, _, fail)
    

    【讨论】:

    • 是的,我知道你可以这样做,但为什么不是默认行为?我认为不是那么简单,当您使用非纯一阶逻辑时更是如此。主要是元函数或元算子。该功能可能会以某种方式引发异常,这是因为操作符的实现方式。不应该那样工作的东西。
    • 成为默认行为是一个非常糟糕的主意。例如。它会将代码中的任何拼写错误转换为失败而不是存在错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多