可能的重复:
在 Prolog 中逐行读取文件
我找到了以下 prolog 代码,它一次读取一个字符并打印出来。
process(File) :-
open('C:/Users/BHARAT/Desktop/a.txt', read, In),
get_char(In, Char1),
process_stream(Char1, In),
close(In).
process_stream(end_of_file, _) :- !.
process_stream(Char, In) :-
print(Char),
get_char(In, Char2),
process_stream(Char2, In).
Run Code Online (Sandbox Code Playgroud)
但是如果文件有多行,有没有办法一次读取 1 整行,以便于标记化。
你说你想标记输入——最好的方法是确定子句语法(DCGs)。随着library(pio)在SWI就可以直接使用语法像这样一个文件的读取:
?- use_module(library(pio)).
?- phrase_from_file(seq(Xs),f).
seq([]) --> [].
seq([E|Es]) --> [E], seq(Es).
Run Code Online (Sandbox Code Playgroud)
现在seq//1用一些更精细的标记器替换。