Используется решение portable на основе Logtalk, которое вы можете использовать как есть с большинством компиляторов Prolog, включая GNU Prolog, или адаптировать под свой собственный код:
---- processor.lgt ----
:- object(processor).
:- public(read_file_to_lines/2).
:- uses(reader, [line_to_codes/2]).
read_file_to_lines(File, Lines) :-
open(File, read, Stream),
line_to_codes(Stream, Codes),
read_file_to_lines(Codes, Stream, Lines).
read_file_to_lines(end_of_file, Stream, []) :-
!,
close(Stream).
read_file_to_lines(Codes, Stream, [Line| Lines]) :-
atom_codes(Line, Codes),
line_to_codes(Stream, NextCodes),
read_file_to_lines(NextCodes, Stream, Lines).
:- end_object.
-----------------------
Пример файла для тестирования:
------ file.txt -------
abc def ghi
jlk mno pqr
-----------------------
Простой тест:
$ gplgt
...
| ?- {library(reader_loader), processor}.
...
| ?- processor::read_file_to_lines('file.txt', Lines).
Lines = ['abc def ghi','jlk mno pqr']
yes