Читать файл строка за строкой в Prolog
Я хочу прочитать текстовый файл и применить предикат к каждой строке (предикаты содержат write
Что делает вывод). Как мне это сделать?
2 ответов
в SWI-Prolog самое чистое решение-написать DCG, который описывает, что такое" линия", а затем вызвать предикат для каждой строки. Используйте библиотеку (pio), чтобы применить DCG к файлу.
редактировать: по просьбе, рассмотрим:
:- use_module(library(pio)).
lines([]) --> call(eos), !.
lines([Line|Lines]) --> line(Line), lines(Lines).
eos([], []).
line([]) --> ( "\n" ; call(eos) ), !.
line([L|Ls]) --> [L], line(Ls).
пример использования: ?- phrase_from_file(lines(Ls), 'your_file.txt').
можно использовать read
читать поток. Не забудьте вызвать at_end_of_stream
для обеспечения отсутствия синтаксических ошибок.
пример:
readFile.pl
main :-
open('myFile.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).
myFile.txt
'line 0'.
'line 1'.
'line 2'.
'line 3'.
'line 4'.
'line 5'.
'line 6'.
'line 7'.
'line 8'.
'line 9'.
ссылкой main
вы получите на выходе:
?- main.
[line 0,line 1,line 2,line 3,line 4,line 5,line 6,line 7,line 8,line 9]
true
просто настроить main
. Вывод здесь является примером использования write
, конечно. Настройте для соответствия вашему запросу.
Я предполагаю, что этот принцип может быть применен для ответа на ваш вопрос. Удача.