我有一个文件如下(数字用空格分隔,行以点结尾):
4554 3332 3 23 344.
4 2 3 5 7 86 56.
7 8 1 4 66.
我想创建一个列表列表,每行一个列表如下:
[[4554,3332,3,23,344],[4,2,3,5,7,86,56],[7,8,1,4,66]]
我该怎么办? 非常感谢你
答案 0 :(得分:3)
我建议使用明确的子句语法(DCG)和DCG /基础库,如下所示:
:- use_module(library(dcg/basics)).
:- use_module(library(pio)).
number_line([]) --> ".".
number_line([N|Ns]) --> integer(N), whites, number_line(Ns).
file([Line|Lines]) --> number_line(Line), blanks, file(Lines).
file([]) --> [].
然后你可以用一个简单的谓词一次解析整个文件:
parse_integer_file(File, Lists) :-
phrase_from_file(file(Lists), File).
使用file.txt
中的示例数据尝试:
?- parse_integer_file('input.txt', R).
R = [[4554, 3332, 3, 23, 344], [4, 2, 3, 5, 7, 86, 56], [7, 8, 1, 4, 66]] .
这种方法有几个优点:
parse_from_file/2
的纯I / O工具效率很高