2012-05-03 6 views
1
resultList(UsersQuery):- 
    question(X,H), 
    write(H), 
    myintersection(H,UsersQuery,Match,TotalQuestionKeywords), 
    Percent is Match/TotalQuestionKeywords*100, 
    write('Question: '), 
    write(X),nl,write('Quality: '), write(Percent),write('%'),nl, 

    /* please look at this part 
    Percent>=50, 
    assert(listofQuestions(Percent,Question)), 
    write(Percent),write(Question),nl, 
    fail. 
resultList(_). 

'listofQuestions'という名前のファクトデータベースを作成したいと思います。すべてうまく動作しますが、私が主張しているものはメモリにとどまります。だから、プログラムをもう一度動かすと、同じリストの事実が 'listofQuestions'に追加されます。Prolog - 一度だけデータベースをアサート/作成する方法

私はただ1セットのデータを持ちたいと思っています。あなたがプログラムを再実行する前に

ありがとう

+0

をされたif-then-else組み込みの述語 '(listofQuestions(P、Q)を使用してみてください - >真を、主張(listofQuestions(P、Q))) ' –

+0

はうまく動作します。しかし、私が望むのは、私のルールを呼び出すたびに、新鮮な空白の "listofQuestions"です。プロローグを再起動した場合にのみ発生します。どんな助け? – HungryCoder

答えて

1

たぶんretractall/1を行います。

+0

ありがとうございました。私は後で撤回する声明を持っていた。しかしあなたのコメントを読んで、私は1行前にそれを置いた。そしてそれは桃のように働く! xD – HungryCoder

2

事実はまだアサートされていないかどうかを確認するアサーション用に別の述語ください:

assertThisFact(Fact):- 
    \+(Fact),!,   % \+ is a NOT operator. 
    assert(Fact). 
assertThisFact(_). 
+0

私はこの答えが好きです。このコンセプトは弾丸であるか?これは '' not''、 '' swi-prolog'と互換性がありますか? –

+0

または、単一の句で否​​定を伴わないでください: 'assert_once(事実): - (事実、! ; assertz(事実)).' –

関連する問題