从标准输入中解析

6 prolog swi-prolog

如何解析标准输入(不缓冲)?如果我理解正确,phrase/2需要一个列表,并phrase_from_file/2library(pure_input)需要一个文件.

我使用普通谓词(不是DCG)和使用类似get_char/2和的内置函数解决了我的问题read_line_to_codes/2,但最后实现看起来与我在C中编写的解决方案非常相似.

如果我能偷偷摸摸一个非常相关的问题:什么是SWI-Prolog的标准输入?read_line_to_codes(library(readutil))需要一个输入流(get/1例如,不像).我用以下谓词得到它:

input_stream(Stream) :-
    current_stream(Object, read, Stream),
    integer(Object).
Run Code Online (Sandbox Code Playgroud)

...这当然有效,但感觉有点黑客攻击.是否可以有多个开放输入流?我怎么知道哪一个是操作系统的标准输入(在我的情况下是Linux)?

Cap*_*liC 3

我认为您正在寻找流的正确命名。这是一个可能有用的示例:

?- read_line_to_codes(user_input,L).
|: a line
L = [97, 32, 108, 105, 110, 101].
Run Code Online (Sandbox Code Playgroud)

我找到的最详细的解释页面在这里