我想接受用户的输入,即[garfield, hates, blacky]
.
hates/2
目前不存在。
在我的数据库中,
process:-
read(Input_List),
add_rule(Input_List).
add_rule([X, Predicate, Y]):-
assertz(Predicate(X, Y)).
但这不起作用。是否可以使用变量作为谓词和事实?或者有没有其他方法可以实现这一目标?
我想接受用户的输入,即[garfield, hates, blacky]
.
hates/2
目前不存在。
在我的数据库中,
process:-
read(Input_List),
add_rule(Input_List).
add_rule([X, Predicate, Y]):-
assertz(Predicate(X, Y)).
但这不起作用。是否可以使用变量作为谓词和事实?或者有没有其他方法可以实现这一目标?
您可以使用(=..)/2
名为univ operator的运算符:
add_rule(X, Predicate, Y) :-
Fact =.. [Predicate, X, Y],
assertz(Fact).
用法 :
?- add_rule(garfield, hates, blacky).
true.
?- hates(garfield, blacky).
true.