从python调用prolog谓词

ДМИ*_*КОВ 5 python prolog ffi swi-prolog

我有一些.pl文件,我想从python脚本调用其中声明的谓词。我怎样才能做到这一点?

例如, test.pl

rD( [], Ans, Ans ).
rD( [X|Xs], Ans, Acc ) :-
    member( X, Acc ),
    rD( Xs, Ans, Acc ), !.
rD( [X|Xs], Ans, Acc ) :-
    \+member( X, Acc ),
    append( Acc, [X], AccNew ),
    rD( Xs, Ans, AccNew ), !.
Run Code Online (Sandbox Code Playgroud)

?- rD( [1,2,3,4,5,4], X ).
X = [1, 2, 3, 4, 5].
Run Code Online (Sandbox Code Playgroud)

我想以rD某种方式从python脚本调用并在结果变量中获取答案

result
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

ps:这只是一个例子,我不想重写当前的Prolog程序。

Giu*_*lli 5

我并不是有直接的经验,但有一个名为PySWIP的项目提供了 Python 和 SWI-Prolog 之间的桥梁。Google Code 项目页面上托管的 wiki 包含安装说明一些使用示例

编辑(2019 年 7 月 5 日)

PySWIP 现在似乎在Github上维护,有自己的安装说明。TLDR:安装 SWI-Prologpip install pyswip应该可以完成这项工作,对于 Python 2 和 3 都是如此。