2015-09-29 45 views
-3

這裏是我的功課:請幫我這個序言鍛鍊; Tibial

設F條款的文件。定義一個程序 findterm(Term) 在終端上顯示f中與Term匹配的第一項。

設f是條件文件。寫一個程序 findallterm(Term) 在終端上顯示符合條款的f中的所有條款。確保Term未在流程中實例化(這可能會阻止它與文件中稍後發生的條款匹配)。

我試着用切割首先要解決的一個

findterm(end_of_file) :- !. 
    findterm(Term) :- 
     read(Term1), 
     Term = Term1, 
     write(Term1), nl, ! 
     ; 
     findterm(Term). 

誰能幫我下嗎?

+1

你勾勒出你與第二運動有什麼問題? – halfer

+0

你真的需要爲你的問題寫一個更好的標題,例如,「在文件中查找術語」。目前的標題沒有提供有關您的問題和問題的有用信息。 –

回答

1

下面的程序如何?

findallterm(Term, File_name) :- 
    open(File_name, read, Stream), 
    findterm(Stream, Term), 
    close(Stream). 

findterm(Stream, _) :- 
    at_end_of_stream(Stream), 
    !. 
findterm(Stream, Term) :- 
    read(Stream, Term_data),  
    ( Term == Term_data 
    -> write(Term_data), nl 
    ; true 
    ),  
    findterm(Stream, Term). 

輸入文件如下。 'C:/work/data.txt'

sun. 
mercury. 
sun. 
mercury. 
venus. 
earth. 
sun. 
mercury. 
venus. 

結果

6 ?- findallterm(mercury, 'C:/work/data.txt'). 
mercury 
mercury 
mercury 

7 ?- findallterm(venus, 'C:/work/data.txt'). 
venus 
venus 
+1

愛丁堡風格IO已棄用。 **請改用ISO Prolog IO **! – repeat

+1

我用ISO Prolog IO改變了程序。 –

+0

現在好了!謝謝。 – repeat