输入流 - 关闭

时间:2011-05-28 21:19:03

标签: input prolog inputstream

如何使用<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

我应该如何修改源代码才能获得该结果?

2 个答案:

答案 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不好或者不是最优的。也许下次我会用这个小费。 :)