2015-09-12 186 views

回答

5

您可以打開文件進行寫入和重定向current_ouput它是這樣的:

?- current_output(Orig), % save current output 
    open('file.txt', write, Out), 
    set_output(Out), 
    listing, 
    close(Out), 
    set_output(Orig). % restore current output 

或者,SWI-Prolog的提供了一個謂語with_output_to/2可用於電流輸出重定向一個目標。請務必閱讀文檔,但在短:

?- open('file.txt', write, Out), 
    with_output_to(Out, listing), 
    close(Out). 

現在的listing/0輸出將被寫入file.txt。 但請記住,那裏會有很多東西。您可能想要使用listing/1來了解特定的謂詞嗎?在這種情況下,使用clause/2portray_clause/2是另一種選擇,特別是如果您想要更多地控制寫入文件的內容和方式。 listing僅用於我猜測的交互式使用。

+2

爲什麼你說'portray_clause/2'是首選的,當'listing(specific_pred/1)'會做什麼所需?使用'portray_clause'更需要手動處理。 – false

+1

@false正是因爲同樣的原因,我猜。我總是覺得'listing/1'是爲了在頂層使用(這是我至少使用它的方式)。如果一個人開始寫一個文件,我只是假設他們正在做更復雜的事情,而不是看一個謂詞的定義。我會糾正我的措辭。 –