2016-11-27 1 views
2

Есть ли способ сделать вывод SWI Prolog на любой синтаксис или ошибки анализа? Я пишу тесты и запускаю их автоматически, и я не всегда замечаю сообщения об ошибках, если у меня есть синтаксические ошибки.Выход из всех ошибок в SWI Prolog

ответ

2

Предполагая, что вы имеете в виду ошибки компиляции исходного файла, предикат 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. 
+0

Спасибо, это сработало для меня, с 'consult/1' и' sure_loaded/1'. Я счел нужным использовать ': - initialization (обеспечить_loaded (some_file)).' Вместо просто:: - sure_loaded (some_file) .', иначе hook не вызывался (SWI 7.2.3). Кроме того, в документах SWI для ['message_hook/3'] (http://www.swi-prolog.org/pldoc/doc_for?object=message_hook/3) говорится, что он должен быть определен как динамический, так и многоточечный. – tangle