1

私はPrologプロジェクトを行っています。以下は私のコードです。

:- dynamic yes/1,no/1.
:- dynamic n_angle/1.

go :- hypothesize(Shape),
  write('Yes I know the shape you talking about is a '),
  write(Shape),
  write('!!!!'),
  undo.

hypothesize(circle)          :- circle,!.

circle :- not(verify(width)),
      verify(radius),
      not(verify(height)),
      verify(diameter_equal_2_radius).

ask(Question):-

write('Has the shape '),
write(Question),
write('?'),
read(Response),
nl,
((Response == yes ; Response == y)
  -> assert(yes(Question));
     assert(no(Question)), fail).

verify(S) :-
   (yes(S) ->  true ;
   (no(S)  ->  fail ;
   ask(S))).

save_file:- tell('D:ansSave.txt').

/* undo all yes/no assertions */
undo :- retract(yes(_)),fail.
undo :- retract(no(_)),fail.
undo :- retract(n_angle(_)),fail.
undo.

そして結果はこのようになります。

?- 行く。形状の幅はありますか?n。

形状の半径は ?y です。

形状の高さは?n.

形状はdiameter_equal_2_radius?yです。

はい、私はあなたが話している形が円であることを知っています!!!!

真実。

上記の結果をtxtファイルに保存したい。

しかし、save_fileをask関数に入れようとすると

ask(Question):-
 save_file,
write('Has the shape '),
write(Question),
write('?'),
read(Response),
nl,
told,
((Response == yes ; Response == y)
  -> assert(yes(Question));
     assert(no(Question)), fail).

結果は毎回上書きされます。誰でもこれを解決する方法を教えてもらえますか? 前もって感謝します。

4

1 に答える 1

0

以前のファイルの内容を上書きしたくない場合は、append/1.

したがって、ルールは次のようにする必要があります。

save_file:- append('D:ansSave.txt').
于 2012-08-26T05:51:16.553 に答える