Prolog - 规则事实

时间:2018-04-22 13:39:30

标签: prolog

这个问题与此问题有关:Prolog - Reduce the knowledge base by deduction

我已经删除了可以扣除的所有事实和规则,但我现在必须编写已被扣除的新事实。

举个例子:         is_a( X, thing) :- is_a( X, house).

将成为:conclusion_premise(A,B)

在某种程度上,我需要拆分规则A = is_a(X, thing),但我如何才能获得B = is_a(X, house)clean_database:- findall( Conclusion, ( conclusion_premise( Conclusion, Premise ), Premise ), L ), list_to_set( L, L_no_duplicate), removeFactcs(L_no_duplicate), conclusion_premise(A,B), B, retract(conclusion_premise(A,B)). % need somehow to add the rule that have been deducted. removeFactcs([]). removeFactcs([X|XS]) :- retract(X), removeFactcs(XS).

再次感谢。

EDITED

到目前为止,我有这个来清理数据库:

javascript:x1

1 个答案:

答案 0 :(得分:0)

如果要根据示例代码

将新规则动态添加到数据库中
:- dynamic( is_a/2 ).

is_a( m1, house ).
is_a( m1, thing ).
is_a( m2, house ).
is_a( m2, thing ).
is_a( m3, niche ).
is_a( m3, house ).
is_a( m3, thing ).
is_a( m4, car ).
is_a( m4, mobile).
is_a( m4, house ).
is_a( m4, thing ).

conclusion_premise(is_a(X, thing), is_a(X, house)).
conclusion_premise(is_a(X, house), is_a(X, niche)).

添加

my_rule() :-
    conclusion_premise(Goal,Premise),
    call(Goal),
    call(Premise),
    dynamic(Goal),
    assert(Goal :- Premise).

首先通过咨询加载事实和规则,然后使用listing / 1查看当前的is_a / 2事实和规则。

?- consult("xyz.pl").
true.

?- listing(is_a).
:- dynamic is_a/2.

is_a(m1, house).
is_a(m1, thing).
is_a(m2, house).
is_a(m2, thing).
is_a(m3, niche).
is_a(m3, house).
is_a(m3, thing).
is_a(m4, car).
is_a(m4, mobile).
is_a(m4, house).
is_a(m4, thing).

true.

现在运行my_rule / 0添加新规则

?- my_rule().
true ;
true ;
true ;
true ;
true ;
false.

验证添加了新规则。

?- listing(is_a).
:- dynamic is_a/2.

is_a(m1, house).
is_a(m1, thing).
is_a(m2, house).
is_a(m2, thing).
is_a(m3, niche).
is_a(m3, house).
is_a(m3, thing).
is_a(m4, car).
is_a(m4, mobile).
is_a(m4, house).
is_a(m4, thing).
is_a(m1, thing) :-
        is_a(m1, house).
is_a(m2, thing) :-
        is_a(m2, house).
is_a(m3, thing) :-
        is_a(m3, house).
is_a(m4, thing) :-
        is_a(m4, house).
is_a(m3, house) :-
        is_a(m3, niche).

true.