変更ログを参照してください。
SWI-Prolog がインストールされている場合は、次のようになります。
pip install -U pyswip
詳細な手順については、「はじめに」を参照してください。
PySwip は、Python プログラムで SWI-Prolog のクエリを実行できるようにする Python-Prolog インターフェイスです。 SWI-Prolog 外国語インターフェース、Prolog でのクエリを簡単にするユーティリティ クラス、および Python インターフェースを備えています。
PySwip は共有ライブラリとして SWI-Prolog を使用し、それにアクセスするために ctypes を使用するため、コンパイルをインストールする必要はありません。
PySwip は、PySwip コミュニティによって提供されました。すべての貢献者に感謝します。
from pyswip import Prolog
Prolog . assertz ( "father(michael,john)" )
Prolog . assertz ( "father(michael,gina)" )
list ( Prolog . query ( "father(michael,X)" )) == [{ 'X' : 'john' }, { 'X' : 'gina' }]
for soln in Prolog . query ( "father(X,Y)" ):
print ( soln [ "X" ], "is the father of" , soln [ "Y" ])
# michael is the father of john
# michael is the father of gina
Prolog ファイルに保存されている既存のナレッジ ベースを参照したり、クエリしたりすることもできます。ファイル名「knowledge_base.pl」と Python が同じ作業ディレクトリで実行されていると仮定すると、次のように参照されます。
from pyswip import Prolog
Prolog . consult ( "knowledge_base.pl" )
from pyswip import Prolog , registerForeign
def hello ( t ):
print ( "Hello," , t )
hello . arity = 1
registerForeign ( hello )
Prolog . assertz ( "father(michael,john)" )
Prolog . assertz ( "father(michael,gina)" )
print ( list ( Prolog . query ( "father(michael,X), hello(X)" )))
from pyswip import Functor , Variable , Query , call
assertz = Functor ( "assertz" , 1 )
father = Functor ( "father" , 2 )
call ( assertz ( father ( "michael" , "john" )))
call ( assertz ( father ( "michael" , "gina" )))
X = Variable ()
q = Query ( father ( "michael" , X ))
while q . nextSolution ():
print ( "Hello," , X . value )
q . closeQuery ()
# Outputs:
# Hello, john
# Hello, gina
Prolog.query
のコア機能は、Nathan Denny のパブリック ドメイン prolog.py に基づいています。
PySwip は、長年にわたって科学論文、論文、学生プロジェクトで使用されてきました。詳細とコミュニティ リンクについては、PySwip コミュニティにアクセスしてください。
PySwip を使用または言及しているプロジェクト、ビデオ、または出版物はありますか?問題を提出するか、プル リクエストを送信します。
LaTeX ドキュメントで PySwip を参照したい場合は、提供されている BibTeX ファイルを使用できます。次の情報を使用して PySwip を参照することもできます。
PySwip は MIT ライセンスに基づいてライセンスされています。