2017-06-03 32 views
1

我正在使用SWI Prolog,並且驚訝地發現在Prolog中沒有這樣做的明顯方法。我所追求的是與第2章類似的東西,但允許沒有實際意義的第一個參數(並且特定於給定文件中的子句,即我不想要整個Prolog庫!)。這裏是我寫的所有條款如何獲得在Prolog中定義/加載的所有子句

clauseX(H,B) :- 
    current_predicate(P/Arity), 
    functor(H,P,Arity), 
    absolute_file_name('filname.pl', AbsFileName), 
    predicate_property(H, file(AbsFileName)), 
    clause(H,B). 

有沒有更簡潔的方法呢?

+0

請注意,大多數Prolog系統只允許您在動態謂詞中使用'clause/2'。在最近SWI-Prolog版本的特定情況下,只要'protect_static_code'標誌設置爲'false',就可以在靜態謂詞中使用'clause/2'。 –

回答

1

好了,我已經能夠縮短一些,不要求前兩個文字,這將在文件filename.pl返回條款

clauseX(H,B) :- 
    absolute_file_name('filname.pl', AbsFileName), 
    predicate_property(H, file(AbsFileName)), 
    clause(H,B). 

但是我仍然關心效率以及是否每次都要查閱文件clauseX被稱爲

相關問題