Есть ли способ сделать вывод SWI Prolog на любой синтаксис или ошибки анализа? Я пишу тесты и запускаю их автоматически, и я не всегда замечаю сообщения об ошибках, если у меня есть синтаксические ошибки.Выход из всех ошибок в SWI Prolog
2
A
ответ
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.
Спасибо, это сработало для меня, с '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