【问题标题】:Prolog pipe partial input, user-input the restProlog 管道部分输入,其余部分由用户输入
【发布时间】:2012-11-26 22:37:18
【问题描述】:

我正在编写一个带有输入循环的序言程序。大量输入已预先编写在响应文件中。我以prolog < response.txt 执行此操作。响应文件完成后,我希望程序通过键盘用户输入继续。但是,当响应文件完成时,它不会从键盘读取/1,而是继续在无限循环中读取end_of_file 作为其输入。

一旦管道到达文件末尾,我希望程序恢复为用户键入的输入。我该怎么做?

提前致谢。

【问题讨论】:

  • 您可能需要显示您用来检测文件已结束的代码。
  • 不清楚你为什么想要这个 - 你想模拟用户输入吗? cat response.txt - prolog 可能已经足够好了。否则,使用命令行参数显式指示文件。
  • 我的程序有一个 cli,是的,我想模拟用户输入,我一直在使用 prolog
  • @false,我尝试了cat response.txt - prolog,但这只是将 response.txt 显示到屏幕上,prolog 对此没有任何作用。
  • cat response.txt - | prolog

标签: stream prolog pipe gnu-prolog


【解决方案1】:

可以询问和重定向您的输入流。

不确定您使用的是哪个版本的 Prolog,但 SWI-Prolog 有很多 methods 用于重定向您的输入流。

如果输入来自键盘,TTY 将等于 true

current_input(Stream), stream_property(Stream, tty(TTY)).

如果输入来自一个文件,Filename 将每个文件输入的名称当前读取自:

current_input(Stream), stream_property(Stream, file_name(Filename)).

您可以将Stream 设置为使用set_input/1 谓词作为输入:

{obtain a Stream handle}, set_input(Stream).

我希望你能以此为基础,因为我还没有弄清楚你应该如何请求键盘输入流。

您可能必须确定您在哪个操作系统上运行,并为每个操作系统设置不同的方法来将您的输入设置为键盘流。

【讨论】:

    猜你喜欢
    • 2019-07-13
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2022-11-23
    • 1970-01-01
    相关资源
    最近更新 更多