asserta(+節) asserta(+ヘッド,+ボディ) asserto(+節,+引数の位置_式) asserto(+ヘッド,+ボディ,+引数の位置_式) assertz(+節) assertz(+ヘッド,+ボディ)
どの形式のassert類も、述語のデ−タベ−スに追加を行います。節は、存在しているその述語の節に従って、特定の順序で追加されます。述語が存在しない場合にはassert類によって生成されます。追加された節は、バックトラックが起きても取り消されません。
追加される節は、節あるいはヘッドとボディの組み合せとして指定できます。つまりその引数は、どんな項でもよいのです。値を持たない変数は、デ−タベ−ス中で、例えば _2124, _2336 といった内部変数に置き換えられます。
assertaは、「節」あるいは「ヘッド:- ボディ」という節を述語定義の先頭に追加します。
assertoは、「節」あるいは「ヘッド:- ボディ」という節を、引数の位置_式番目の引数の値に従ってデ−タベ−ス上に追加します。その結果デ−タベ−ス上には、引数の位置_式番目の引数の値が小さい順に述語が並びます。
assertzは、「節」あるいは「ヘッド:- ボディ」という節を述語の定義の最後に追加します。
?- assertz(t(a,6) :- fail), asserta(t(b,3) :- true), asserto(t(c,4),(write('t/c/4'),fail),2).
yes ?- listing(t). t(b,3). t(c,4) :- write('t/c/4'), fail. t(a,6) :- fail.
yes ?- _
illegal_predicate 引数が複合項でない out_of_range 「引数の位置_式」が大きすぎるか、あるいは小さすぎる integer_expected 「引数の位置_式」が整数でない not_modifiable 述語が変更できない