2017-04-12 43 views
0

這是我在Prolog中的代碼。Prolog不會停止接受讀取數據

do(cinema):- parents(yes); (parents(no),weather(windy),money(less)). 
do(play):- parents(no),weather(sunny). 
do(stay):- parents(no),weather(rainy). 
do(shopping):- parents(no),weather(windy),money(more). 
start:- write('Parents: '),read(X),assert(parents(X)), write('Weather: '),read(Y),assert(weather(Y)), write('Money: '),read(Z),assert(money(Z)). 
clear:- retract(parents(X));retract(weather(X));retract(money(X)). 

我試圖接受來自用戶的數據,然後使用決策樹來找出將要完成的任務。 我運行代碼:

?-start, do(X). 

但讀書的家長輸入後不寫天氣,並保持讀取數據。

回答

1

你的程序沒有任何問題。見http://swish.swi-prolog.org/p/JDAJcUhq.pl。最可能的原因已經提到:沒有用「。」來完成你的任期。 clear/0確實是錯誤的,但在Web版本中不需要,因爲每個新查詢都是在新環境中執行的。

至少在SWI-Prolog中,在從終端讀取操作之前不需要刷新,因爲刷新控制檯輸出流總是在讀取之前完成。

+1

非常感謝!似乎問題在於我沒有宣佈這些方法,這是你在開始時所做的 – telekineser

0

嘗試在寫入目標之後放入一些沖洗目標,然後記住在您的輸入中添加句點,因爲您正在使用讀取/ 1期望的術語。

+0

您還需要將縮進更改爲縮進btw並更改爲連接。 – user27815