【问题标题】:Input stream - closing输入流 - 关闭
【发布时间】:2011-05-28 21:19:03
【问题描述】:

如何在 SWI-Prolog 中使用<CTRL>+<D> 组合关闭输入流?

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

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

【问题讨论】:

  • 现在如果我输入 :'end' 我会得到一些默认句子和 'true'value 是什么使该流关闭,但是如何将其更改为 CTRL+D

标签: input prolog inputstream


【解决方案1】:

作为 SWI-Prolog 开发主管 Jan Wielemaker recommends

[readln is] 来自旧的做法。它的定义不是很好。使用library(readutil) 谓词。这些都有记录,而且设计得更好。

【讨论】:

  • 嗯,但是那个库。没有解决我的问题.. 或者它确实解决了我还没有看到
【解决方案2】:

我已经找到了解决方案。 要获得该结果,我必须应用 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 时,我们可以停止它(关闭流,这与关闭机器人相同)。

@larsmans:很高兴知道readln 不好或不是最优的。也许下次我会使用那个技巧。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 2011-09-04
    • 1970-01-01
    • 2022-12-12
    • 2012-07-01
    • 1970-01-01
    • 2021-03-09
    • 2021-06-26
    相关资源
    最近更新 更多