Ish*_*shq 21
您可以使用它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).
Run Code Online (Sandbox Code Playgroud)
MYFILE.TXT
'line 0'.
'line 1'.
'line 2'.
'line 3'.
'line 4'.
'line 5'.
'line 6'.
'line 7'.
'line 8'.
'line 9'.
Run Code Online (Sandbox Code Playgroud)
因此,通过调用,main您将收到输出:
?- main.
[line 0,line 1,line 2,line 3,line 4,line 5,line 6,line 7,line 8,line 9]
true
Run Code Online (Sandbox Code Playgroud)
只需配置main.write当然,这里的输出是一个例子.配置以匹配您的请求.
我认为这个原则可以用来回答你的问题.祝好运.
mat*_*mat 14
在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).
Run Code Online (Sandbox Code Playgroud)
样品用法: ?- phrase_from_file(lines(Ls), 'your_file.txt').