在iPhone上执行prolog代码

时间:2010-10-11 10:55:14

标签: iphone prolog logic-programming

我目前需要在我正在制作的应用程序中执行prolog代码。我知道Apple可能永远不会在App Store中允许这样的东西,但这也不是意图。这是一个永远不会到达App Store的私人项目。

目的

在这种情况下,prolog用于描述对象(例如电话)及其属性。将使用prolog脚本中指定的坐标使用OpenGL绘制对象。使用prolog的原因是我需要能够向程序查询该对象具有的一些功能,并且对此进行了大量修改。结论:我“需要”从我的应用程序查询prolog脚本。

可能的解决方案

  • 嵌入用C编写的现有实现。我不确定这是否会起作用。
  • 在另一台计算机上执行prolog代码并使用网络查询prolog。
  • 似乎可以在应用程序中运行某种Ruby VM(据我所知,shinycocos使用它),这可以用来运行Ruby Prolog实现之一吗?
  • 找一些Prolog的替代品。这需要给我一些与prolog相同的可能性。

可悲的是,谷歌让我几乎没有任何结果,所以我觉得我可能在这个项目上很孤单。如果有人有任何经验或线索,我会非常感激。

5 个答案:

答案 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)