【问题标题】:A program crashing the SWI Prolog console使 SWI Prolog 控制台崩溃的程序
【发布时间】:2013-10-21 18:52:59
【问题描述】:

我正在运行我编写的 Prolog 程序(自然演绎中的证明测试器),当我运行程序 (run_all_tests('proof_tester.pl').) 时,程序运行时,会在控制台(我几乎没有时间看什么),然后关闭 SWI Prolog。它只是消失了,没有警告或错误消息或任何东西。这可能是什么?

【问题讨论】:

  • 您可能使用递归到深度的谓词溢出堆栈和/或尝试使用超出生成列表大小的可用内存。
  • 这显然不应该发生,并且可能是引擎或控制台代码中的错误。请在 SWI 邮件列表上报告。系统永远不应该像这样崩溃。如果它耗尽了资源,它应该抛出一个异常,就像@mbratch 提到的情况一样。
  • 您确定程序崩溃了吗?在计算结束时停止执行的程序中是否可以调用halt/0halt/1?可能是输出应该被重定向到一个文件?
  • 程序结束时有一个“停止”,当我删除它时,程序可以运行并且没有使控制台崩溃。但是,对于同样的问题,我有另一个解决方案(也没有停止),它仍然使控制台崩溃。我有足够的时间看到 2-3 个红色警告,但没有别的。
  • 也许您可以将程序输出重定向到一个文本文件并发布这些警告以获得进一步的建议?

标签: crash prolog swi-prolog


【解决方案1】:

当控制台因halt 被调用而关闭时,这不是“崩溃”。

如果你run the program swipl -s proof_tester.pl from a command line而不是控制台,那么如果代码执行halt,你的输出仍然会在“终端”窗口中。

您可能更喜欢将消息从 SWI-Prolog 重定向到文本文件(WindowsLinux),然后您可以使用文本编辑器或其他方式在闲暇时阅读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多