我知道我们可以在运行时动态添加事实,意思是
fact1(+First,+Second).
我可以使用asserta插入。但是我想问一下,我可以在运行时添加仿函数,这意味着最初只有一个事实,如fact1(first,second).
,但用户会在运行时插入更多的事实说
fact2(first,second).
fact3(first,second).
这里最初我们不知道要添加多少事实。假设用户将输入为3然后我们必须添加fact1,fact2和fact3。如果用户输入为4,那么我们必须添加四个事实,即fact1,fact2,fact3和fact4。
对此方向的任何建议表示赞赏。感谢。
答案 0 :(得分: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,第一,第二)