2016-11-17 55 views
0

我有一個prolog文件,它將給定的謂詞bongard(A,X)與給定的背景事實進行分類。 片段的規則:找出在prolog文件中觸發哪個規則

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有前兩個規則..你明白了。這樣,如果File2分類規則,我知道第二個規則被解僱了。

有沒有人有更好的建議呢?我可以寫(X)和寫(Nr),所以我知道哪個謂詞被解僱了?

+2

什麼意思 「BONGARD」? – false

+1

請提供[MCVE](http://stackoverflow.com/help/mcve) – 2016-11-18 09:14:36

回答

0

難道你們就不能只加一個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)"