2011-11-30 45 views
1

我要接受用户的输入,即[garfield, hates, blacky]新规则。 hates/2目前不存在。如何断言从用户输入(PROLOG)

在我的数据库,

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

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

但是,这是行不通的。是否有可能使用变量作为谓词和事实? 或者还有其他方法可以实现吗?

回答

4

可以使用(=..)/2操作称为univ operator

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

用法:

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

?- hates(garfield, blacky). 
true. 
+0

它的工作原理。谢谢 –