2012-08-26 63 views
1

我在做一個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). 

它每次都會覆蓋結果。誰能告訴我如何解決這個問題?提前致謝。

+0

改寫結果或覆蓋之前的結果? –

+0

它會覆蓋以前的數據 – Eric

回答

0

如果您不想覆蓋以前的文件內容,請考慮使用append/1

所以您的規則必須是:

save_file:- append('D:ansSave.txt'). 
+0

,但我如何在程序中應用save_file。我很困惑。你能幫我指出嗎?如果我想保存如上所示的數據。 – Eric

+0

我似乎無法開始運行querry。你能寫一個運行在你的機器上的測試用例,而不是給你的測試用例嗎? –

+0

'go.'立即返回'false' –