我在做一個Prolog項目,下面是我的代碼。在Prolog中使用tell函數保存答案
:- 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。
是的我知道你談論的形狀是一個圓圈!
true。
我想保存如上所示的結果到一個txt文件。
但是當我嘗試把SAVE_FILE到問功能
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).
它每次都會覆蓋結果。誰能告訴我如何解決這個問題?提前致謝。
改寫結果或覆蓋之前的結果? –
它會覆蓋以前的數據 – Eric