Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File Swi Prolog脚本未正确执行_File_Prolog - Fatal编程技术网

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)中可能出现的错误,这些错误当前将保持隐藏状态