问题描述
我想知道是否有一种“简单”的方法可以从 C# 代码(在 Unity 上下文中)调用 Prolog(最好是 SWI-Prolog)代码。
我已经尝试使用 SWI-Prolog - C# interface (source here) 但是它没有得到很好的维护,我不能让它与 SWI-Prolog 64 位的最新版本一起使用(截至今天 8.2.4)。
我还看到可以使用 SWI-Prolog socket 和 C# 套接字(或 Unity 套接字)发送信息,但我无法使其工作,而且我不确定使用套接字是最好的主意为了表演。
对我有用的唯一解决方案是使用另一个“自定义”序言引擎:CSharpProlog。这允许我在 CSharp 文件中集成 Prolog 代码。然而,如果可能的话,我想使用 SWI-Prolog,有谁知道我该怎么做?
解决方法
从您提供的链接来看,来源并不明显here。 只需尝试编译它,以适合您的目标机器架构。
我正在尝试在 Linux 上使用 MonoDevelop 生成界面,但不是立即生成,稍后将重试。同时,您可以在 Windows 上尝试。可能会更简单...
编辑
现在我有时间尝试从 Windows 10 64 位的源代码编译,到目前为止它似乎运行得很好。我正在使用 VisualStudio Community 2017,在打开解决方案 (contrib-swiplcs\SwiPlCs_git.sln) 后,在 SwiPLcs 属性 - 编译中定义了 _PL_X64。
HTH
编辑
已上传 this repo,其中显示了 SWIPlC 的简化用法。 请注意,有一个目录 (swipl_cs),我在其中简单地从 SwiPlCs 复制(未更改)必不可少的源文件。 有一个 Prolog 文件,它计算 N-Queens 问题的解决方案(只是第一个,为了使事情尽可能简单)并显示 CLP(FD) 执行的步骤 - 感谢 Markus Triska 的原始实现。