2012-12-09 73 views
1

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

我希望程序在管道到达文件末尾时恢复为用户输入的输入。我该怎么做呢?

在此先感谢。

+0

您可能必须显示您正在使用的代码位,以检测文件已结束。 –

+0

目前尚不清楚你为什么要这样做 - 你想模拟用户输入吗? 'cat response.txt - prolog'可能已经足够了。否则,请使用命令行参数明确指定文件。 – false

+0

我的程序有一个cli,是的,我想模拟用户输入,我一直在用prolog lildigiman

回答

0

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

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

如果输入是从键盘,TTY将等于true

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

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

如果输入的是从一个文件,Filename将文件输入的每个名称当前读取

您可以设置Stream为输入与set_input/1谓语使用:

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

我希望你可以建立在这个基础上,因为我还没有想出你应该如何要求键盘输入流。

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