2017-10-28 179 views
1

我想读取一个文件,然后根据第一个结果编写另一个文件,但是一旦我读取第一个文件,程序立即终止。我寻找了为什么会发生,但我没有找到任何东西。我想知道有人能帮助我。Swi Prolog脚本不能正确执行

这是代码:

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 

编辑:我认为问题在于at_end_of_stream

readWords(InStream) :- 
    \+ at_end_of_stream(InStream), 
    readWord(InStream, W), 
    write(W), nl, 
    addWordToDatabase(W), 
    readWords(InStream). 

回答

1

您错过了递归终止。尝试

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球possibily发生(例如,在addWordToDatabase/1中),目前将保持隐藏状态。