2011-05-28 109 views
1

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

我該如何修改源代碼以獲得該結果?

+0

現在,如果我鍵入:'結束'我得到一些默認句子和'true'value是什麼使該流關閉,但如何將其更改爲CTRL + D – Tom 2011-05-28 21:20:46

回答

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不好或者不是最佳。也許下次我會使用這個提示。 :)

2

由於SWI-Prolog的開發鉛一月Wielemaker recommends

[readln是來自多年的實踐的東西。它沒有很好的定義。使用library(readutil)謂詞。這些記錄和方式設計得更好。

+0

嗯,但該lib。並沒有解決我的問題..或者也許它沒有,我還沒有看到 – Tom 2011-05-29 11:32:15