Определение сработавшего правила в файле пролога

У меня есть файл пролога, который классифицирует заданный предикатный бонгард (A, X) с заданными фоновыми фактами. Фрагмент правил:

bongard(A,[neg]) :- triangle(A,C), \+ in(A,C,D), !. 
bongard(A,[neg]) :- \+ triangle(A,C), !. 
...

Я выполняю эту программу так: swipl -s file.pl -g "bongard(a, X), write(X)", чтобы получить классификацию для этого предиката.

Теперь я также хотел бы знать, какое правило сработало и фактически ограничило переменную. Есть какой-нибудь изящный способ сделать это? Прямо сейчас мне нужно сохранить дополнительные n файлов для исходного файла пролога с n правилами. File1 имеет первое правило, file2 - первые 2 правила .. Вы поняли. Таким образом, если File2 классифицирует правило, я знаю, что второе правило сработало.

Есть ли у кого-нибудь лучшие предложения по этому поводу?

РЕДАКТИРОВАТЬ: А как насчет того, чтобы присвоить предикату уникальный номер «bongard (A, X, nr)», я мог бы записать (X) и записать (Nr), чтобы я знал, какой предикат сработал?


person xrdty    schedule 17.11.2016    source источник
comment
Что значит бонгард?   -  person false    schedule 18.11.2016
comment
Предоставьте MCVE   -  person    schedule 18.11.2016


Ответы (1)


Разве нельзя просто добавить id номер:

bongard(1,A,[neg]) :- triangle(A,C), \+ in(A,C,D), !. 
bongard(2,A,[neg]) :- \+ triangle(A,C), !. 
...

а затем сделайте (например)

swipl -s file.pl -g "bongard(N,a,X), format('~w (rule ~w)~n',X,N)"
person Tomas By    schedule 06.02.2017