2011-02-15 78 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