2011-02-15 76 views
1

我知道,我们可以添加的事实在运行时动态的,意味着查询在序言

fact1(+First,+Second).

我可以插入使用asserta的。但我要问我可以添加在运行时的仿函数意味着最初只有像fact1(first,second).但用户一个事实会插入在运行时的一些更多的事实说

fact2(first,second).
fact3(first,second).

这里开始我们不不知道要添加多少事实。假设用户将输入为3,那么我们必须添加fact1,fact2和fact3。如果用户输入为4,那么我们必须添加四个事实,即事实1,事实2,事实3和事实4。

向这个方向的任何建议表示赞赏。谢谢。

回答

3

您可以使用谓词atom_concat/3和= ../2 来构建断言的事实。下面是一个使用它们根据需要断言谓词的断言(基本名称,数字和两个参数)的示例:

assert_predicate(Name, N, Parm1, Parm2):- 
    atom_concat(Name, N, FactName), 
    Fact=..[FactName, Parm1, Parm2], 
    asserta(Fact). 

,你会喜欢的东西使用它: assert_predicate(事实上,1,第一,第二)

+0

非常感谢你。 – anilonwebs 2011-02-16 06:24:07