【发布时间】:2016-11-27 03:33:01
【问题描述】:
有没有办法让 SWI Prolog 退出任何语法或解析错误?我正在编写测试并自动运行它们,如果我有语法错误,我并不总是注意到错误消息。
【问题讨论】:
标签: prolog swi-prolog
有没有办法让 SWI Prolog 退出任何语法或解析错误?我正在编写测试并自动运行它们,如果我有语法错误,我并不总是注意到错误消息。
【问题讨论】:
标签: prolog swi-prolog
假设您的意思是源文件编译错误,load_files/2 谓词错过了在第一个错误时停止的选项。一种可能的解决方案是定义message_hook/3 谓词以在语法错误的情况下调用abort/0 或halt/1。比如:
:- multifile user:message_hook/3.
user:message_hook(syntax_error(Culprit), _, _) :-
% maybe print Culprit for some debugging information
abort.
【讨论】:
consult/1 和 ensure_loaded/1。我发现有必要使用:- initialization(ensure_loaded(some_file)). 而不仅仅是:- ensure_loaded(some_file).,否则不会调用挂钩(SWI 7.2.3)。此外,message_hook/3 的 SWI 文档说它必须定义为动态和多文件。