Существует несколько возможных и более разумных в производительности решений для получения неинтерпретируемых, т.е. простых текстовых строк из файла:
SWI-Prolog:
read_line(S, X) :-
read_line_to_codes(S, L),
read_line2(L, X).
read_line2(end_of_file, _) :- !, fail.
read_line2(L, X) :-
atom_codes(X, L).
Jekejeke Prolog:
:- use_module(library(stream/console)).
Вот некоторые временные интервалы чтения файла из 655 строк:
test :-
open('<path>', read, Stream),
test(Stream),
close(Stream).
test(Stream) :-
read_line(Stream, _), !,
test(Stream).
test(_).
SWI-Prolog:
̀?- time((between(1,100,_), test, fail; true)).
% 328,300 inferences, 0.125 CPU in 0.143 seconds (88% CPU, 2626400 Lips)
true.
Jekejeke Prolog:
?- time((between(1,100,_), test, fail; true)).
% Up 121 ms, GC 2 ms, Thread Cpu 94 ms (Current 05/07/19 17:19:05)
Yes
Полагаю, что решение SWI-Prolog, которое вместо строки читает атом, может быть быстрее.Но в приведенном выше примере мы сравниваем атом с показанием атома.