【问题标题】:Finding out which rule fired in a prolog file找出在 prolog 文件中触发的规则
【发布时间】:2016-11-17 21:10:20
【问题描述】:

我有一个序言文件,它用给定的背景事实对给定的谓词 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),这样我就知道触发了哪个谓词?

【问题讨论】:

  • “邦加德”是什么意思?
  • 请提供MCVE

标签: prolog prolog-toplevel


【解决方案1】:

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

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)"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多