2012-12-09 112 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). 

我希望你可以建立在這個基礎上,因爲我還沒有想出你應該如何要求鍵盤輸入流。

您可能需要確定您正在運行哪個操作系統,併爲每個操作系統設置不同的方法以將輸入設置爲鍵盤流。