1

ユーザーの入力を受け入れたい、つまり[garfield, hates, blacky]hates/2現在は存在しません。

私のデータベースでは、

process:-
    read(Input_List),
    add_rule(Input_List).

add_rule([X, Predicate, Y]):-
    assertz(Predicate(X, Y)).

しかし、これは機能しません。変数を述語およびファクトとして使用することは可能ですか?または、これを達成する他の方法はありますか?

4

1 に答える 1

5

univ演算子(=..)/2と呼ばれる演算子を使用できます:

add_rule(X, Predicate, Y) :-
    Fact =.. [Predicate, X, Y],
    assertz(Fact).

使用法 :

?- add_rule(garfield, hates, blacky).
true.

?- hates(garfield, blacky).
true.
于 2011-11-30T12:47:58.873 に答える