File Swi Prolog脚本未正确执行
我想先读取一个文件,然后根据第一个文件的结果编写另一个文件,但一旦我读取了第一个文件,程序就会立即终止。我已经寻找了它发生的原因,但没有找到任何东西。我想知道是否有人能帮助我 代码如下:File Swi Prolog脚本未正确执行,file,prolog,File,Prolog,我想先读取一个文件,然后根据第一个文件的结果编写另一个文件,但一旦我读取了第一个文件,程序就会立即终止。我已经寻找了它发生的原因,但没有找到任何东西。我想知道是否有人能帮助我 代码如下: main :- current_prolog_flag(argv, Argv), [H|_T] = Argv, readPlainText(H), getList(L), open('result.txt',write,X), write(X, L), nl(X),
main :-
current_prolog_flag(argv, Argv),
[H|_T] = Argv,
readPlainText(H),
getList(L),
open('result.txt',write,X),
write(X, L), nl(X),
close(X),
halt.
main :-
halt(1).
执行这段代码后,脚本停止:
readPlainText(X) :-
open(X, read, Stream),
readWords(Stream),
close(Stream).
我正在从控制台执行:
swipl -s leer.pl --quiet menciones.txt
编辑:我认为问题出在\u流的\u端
readWords(InStream) :-
\+ at_end_of_stream(InStream),
readWord(InStream, W),
write(W), nl,
addWordToDatabase(W),
readWords(InStream).
你错过了递归终止。试一试
readWords(InStream) :-
( \+ at_end_of_stream(InStream)
-> readWord(InStream, W),
write(W), nl,
addWordToDatabase(W),
readWords(InStream)
; true
).
或者,您可以保持readWords/1不变,并在其之后添加EOF的处理程序:
readWords(_InStream).
然后,您可以测试readWords/1目标(例如,addWordToDatabase/1)中可能出现的错误,这些错误当前将保持隐藏状态