2017-06-03 8 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

OK、私は、これはファイルfilename.plに句を返します。最初の2つのリテラルが必要とされていない、ややそれを短縮することができました

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

は、しかし私は約まだ心配ですそれが効率的であることと、clauseXが呼び出されるたびにファイルを参照する必要があるかどうか

関連する問題