2016-11-27 40 views
2

有没有办法让SWI Prolog退出任何语法或解析错误?我正在编写测试并自动运行测试,并且如果出现语法错误,我并不总是注意到错误消息。退出SWI中的所有错误Prolog

回答

2

假设您的意思是源文件编译错误,load_files/2谓词会错过一个选项以停止第一个错误。一个可能的解决方案是定义message_hook/3谓词,以在语法错误的情况下调用abort/0halt/1。例如:

:- multifile user:message_hook/3. 

user:message_hook(syntax_error(Culprit), _, _) :- 
    % maybe print Culprit for some debugging information 
    abort. 
+0

谢谢,这对我来说,'consult/1'和'ensure_loaded/1'。我发现有必要使用': - initialization(ensure_loaded(some_file))。'而不是': - ensure_loaded(some_file).',否则钩子不会被调用(SWI 7.2.3)。此外,['message_hook/3'](http://www.swi-prolog.org/pldoc/doc_for?object=message_hook/3)的SWI文档声称它必须被定义为动态以及多文件。 – tangle