有没有一种方法可以使SWI 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)。此外,SWI文档中关于message_hook/3
的说明说它必须定义为动态和多文件。 - tangle