这是我在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).
但是在为父母阅读输入并且不断阅读数据后,它不会写天气。
答案 0 :(得分:1)
您的计划没有任何问题。见http://swish.swi-prolog.org/p/JDAJcUhq.pl。最有可能的原因已经提到:没有用“。”完成你的学期。 clear/0
确实是错误的,但在Web版本中不需要,因为每个新查询都是在新环境中执行的。
至少在SWI-Prolog中,没有必要在从终端进行读取操作之前进行刷新,因为在读取之前总是先完成控制台输出流。
答案 1 :(得分:0)
尝试在写入目标之后设置一些刷新目标,然后记住在输入时添加一个句号,因为你正在使用需要术语的read / 1。