我目前需要在我正在制作的应用程序中执行prolog代码。我知道Apple可能永远不会在App Store中允许这样的东西,但这也不是意图。这是一个永远不会到达App Store的私人项目。
目的
在这种情况下,prolog用于描述对象(例如电话)及其属性。将使用prolog脚本中指定的坐标使用OpenGL绘制对象。使用prolog的原因是我需要能够向程序查询该对象具有的一些功能,并且对此进行了大量修改。结论:我“需要”从我的应用程序查询prolog脚本。
可能的解决方案
可悲的是,谷歌让我几乎没有任何结果,所以我觉得我可能在这个项目上很孤单。如果有人有任何经验或线索,我会非常感激。
答案 0 :(得分:6)
在遇到调用prolog代码的类似困难时,虽然情况不同,但我建议您查看castor c ++库。这允许您在本机c ++中编写逻辑范例代码,而无需扩展语言。由于castor是一个只有头文件库,所以在c ++可用的地方很容易编译 Castor网站:http://www.mpprogramming.com/cpp/default.aspx
答案 1 :(得分:5)
半年后,我想就此提供一些见解。我最终用Java编写了一个带prolog接口的服务器,通过TCP接受prolog调用。它的工作方式几乎与现场prolog解释器SWI-prolog(以及其他)提供的一样,并且大多数工作得很好。但是,它远非最佳解决方案,因为您无法从prolog内部调用函数。你失去了双向沟通的可能性。
如果我重新开始,我肯定会更努力地编译一个适用于iOS的纯C实现。我给了它一个快速的去,但我缺乏经验阻止我甚至删除我得到的所有错误。从你不能在未经修改的iOS版本上作为后台进程运行的事实判断,必须进行一些重大的重写。因此,人们可能只需要从头开始编写一个新的实现(可能受到一些更轻量级的实现的启发)以获得完美的解决方案。
答案 2 :(得分:3)
您可以下载SWI-Prolog's源代码并使用XCODE for iOS平台进行编译。我从来没有这样做过,但这在技术上肯定是可能的。
一旦你这样做,有很多关于如何从 C / C ++ 运行prolog代码的例子,因此,你将能够从Objective-C运行prolog。
答案 3 :(得分:1)
仅供参考,如果您使用JPL,您可以非常轻松地在Java和SWI-Prolog之间进行双向调用:
http://www.swi-prolog.org/packages/jpl/
它也是完全可重入的,所以你可以从java中实例化prolog代码,然后java实例化java代码等......
几年前,当我被要求将基于Prolog的推理引擎连接到许多Java代码时,我为许多商业项目做了这个。
它确实使用JNI(Java Native Interface),因此您需要注意编译和链接到本机API的方式。虽然如果你为每个平台适当地编译它,你可以使它跨平台工作。我有它在OS-X,Windows,Linux& Solaris操作系统。
答案 4 :(得分:0)