如何使用<CTRL>+<D>
组合关闭SWI-Prolog中的输入流?
bot:-
repeat,
write('>'),
readln(X), nl,
answer(X, Answer),
write(Answer), nl,
end(X).
end(X):-member('end',X).
Where X is a list of keywords to that bot
我应该如何修改源代码才能获得该结果?
答案 0 :(得分:2)
由于SWI-Prolog开发领导Jan Wielemaker recommends:
[
readln
是来自旧习惯的东西。它的定义不是很明确。使用library(readutil)
谓词。这些都是记录在案的,设计得更好。
答案 1 :(得分:0)
我已经找到了解决方案。 要获得该结果,我必须应用 at_end_of_stream 并剪切“!”。
bot:-
write('Hello'),
nl,
write('>'),
repeat,
readln(X),
answer(X, Answer),
write(Answer),
nl,
write('>'),
at_end_of_stream, !.
最后两行代码使它按预期工作。
现在当使用组合Ctrl+D
时,我们可以阻止它(关闭流,这与关闭bot的方法相同)。
@larsmans:很高兴知道readln
不好或者不是最优的。也许下次我会用这个小费。 :)