2011-05-28 84 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