pyswip
v0.3.2
請參閱更改日誌。
如果您安裝了 SWI-Prolog,則只需:
pip install -U pyswip
請參閱入門了解詳細說明。
PySwip 是一個 Python-Prolog 接口,可在 Python 程式中查詢 SWI-Prolog。它具有 SWI-Prolog 外語介面、一個可以輕鬆使用 Prolog 進行查詢的實用程式類別以及一個 Pythonic 介面。
由於 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 許可證獲得許可。