0

我有一个序言文件,它用给定的背景事实对给定的谓词 bongard(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 个规则的原始 prolog 文件保留额外的 n 个文件。File1 有第一条规则,file2 有前两条规则。你明白了。这样,如果 File2 对规则进行分类,我知道第二条规则被触发。

有没有人对此有更好的建议?

编辑:给谓词一个唯一的数字“bongard(A,X,nr)”怎么样,然后我可以同时写(X)和写(Nr),这样我就知道哪个谓词被触发了?

4

1 回答 1

0

你能不能只添加一个身份证号码:

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)"
于 2017-02-06T17:40:21.967 回答