Prolog - 意外的文件结束

时间:2014-05-01 15:42:33

标签: input io prolog

在Prolog错误中读取文件

嗨,我正在研究Prolog项目,我需要阅读整个文件。我有一个名为' meno.txt'我需要阅读它。我在堆栈上找到了一些代码。代码如下:

main :-
  open('meno.txt', read, Str),
  read_file(Str,Lines),
  close(Str),
  write(Lines), nl.


read_file(Stream,[]) :-
    at_end_of_stream(Stream).


read_file(Stream,[X|L]) :-
    \+ at_end_of_stream(Stream),
    read(Stream,X),
    read_file(Stream,L).

当我调用main/0谓词时,出现意外结束文件的错误。我的文件看起来像这样:

line1
line2
line3
line4

我在这里也发现了类似的问题以及ASCII和UTF编码的解决方案,但我尝试过,看起来它不是我的解决方案。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:5)

谓词read/2从文件中读取Prolog术语。那些必须以一段时间结束。尝试将文件内容更新为:

line1.
line2.
line3.
line4.

您可能会在Prolog解析器尝试查找结束时间段时意外结束文件。

答案 1 :(得分:3)

如果您使用的是SWI Prolog,您可以使用类似的内容进行阅读:

read_file(Stream,[X|L]) :-
    \+ at_end_of_stream(Stream),
    read_line_to_codes(Stream,Codes),
    atom_chars(X, Codes),
    read_file(Stream,L), !.

read_line_to_codes/2将每一行直接读入字符代码数组。然后atom_chars/2会将代码转换为原子。