2017-10-28 121 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中),目前將保持隱藏狀態。