にのみ、最初の結果を追加し、私はいくつかのものを事前計算し、私のプログラムの冒頭で事実として結果を保存しようとしている:(簡略化されたコード)プロローグ:アサートを含むルールは事実
:- dynamic cost/2.
%recipe(Id,Cost)
recipe(1,20).
recipe(2,40).
assert_all :- recipe(Id,Cost), assert(cost(Id,Cost)).
しかし、唯一のしかしながら
| ?- assert_all.
yes
| ?- cost(Id,Cost).
Id = 1,
Cost = 20 ? ;
no
| ?
場合直接SICStusプロローグコンソールのI入力assert_allの右側を、コスト/ 2の両方、私はSICStusプロローグでファイルを参照したときに最初の結果は、コスト(1,20)がアサートされます事実はそこにある。
| ?- recipe(Id,Cost), assert(cost(Id,Cost)).
Id = 1,
Cost = 20 ? ;
Id = 2,
Cost = 40 ? ;
no
| ?- cost(Id,Cost).
Id = 1,
Cost = 20 ? ;
Id = 2,
Cost = 40 ? ;
no
この動作は非常に混乱していますが、どうなっていますか?
最初に結果を保存するためにassertaを試してみてください。http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse48 –