如何在Eclipse CLP中读取流?

时间:2013-07-25 17:33:35

标签: prolog eclipse-clp

我是Eclipse新手,我一直试图读取文件流但没有成功。我通常在SWI-Prolog中使用的代码是:

read_until_stop(File, [L|Lines]) :-
    read_line_to_codes(File, Codes),
    Codes \= end_of_file,
    atom_codes(L, Codes),
    L \= stop,
    !,
    read_until_stop(File, Lines).
read_until_stop(_, []).

但是read_line_to_codes显然在Eclipse中不可用。对此有什么好的选择?

2 个答案:

答案 0 :(得分:1)

正如Eclipse manual所建议的那样,Eclipse副本将是

read_line(Stream, String) :-
    read_string(Stream, end_of_line, _Length, String).

区别在于read_string返回实际字符​​串而不是代码列表,即不再需要atom_codes

?- read_string(input, end_of_line, Length, String).
      abcdefghi
      Length = 9
      String = "abcdefghi"
      yes.

答案 1 :(得分:1)

我认为read_line_to_codes / 2可以很容易地在ECLiPSe中实现,但是为了效率重用可用的内置。您可以使用read_line / 2。

尝试定义

:- use_module(library(util)).
read_line_to_codes(S, L) :- read_line(S, L).

或只是调用read_line ...