在iPhone上执行prolog代码

在iPhone上执行prolog代码,iphone,prolog,logic-programming,Iphone,Prolog,Logic Programming,我目前需要在我正在制作的应用程序中执行prolog代码。我知道苹果可能永远不会允许类似的东西出现在应用商店中,但这也不是我们的意图。这更像是一个私人项目,永远不会到达应用商店 目的 在本例中,prolog用于描述对象(例如电话)及其属性。使用prolog脚本中指定的坐标,使用OpenGL绘制对象。使用prolog的原因是,我需要能够查询程序关于这个对象所具有的一些特性,prolog大大简化了这一点。一句话:我“需要”从我的应用程序中查询prolog脚本 可能的解决方案 嵌入一个已经存在的用C编

我目前需要在我正在制作的应用程序中执行prolog代码。我知道苹果可能永远不会允许类似的东西出现在应用商店中,但这也不是我们的意图。这更像是一个私人项目,永远不会到达应用商店

目的

在本例中,prolog用于描述对象(例如电话)及其属性。使用prolog脚本中指定的坐标,使用OpenGL绘制对象。使用prolog的原因是,我需要能够查询程序关于这个对象所具有的一些特性,prolog大大简化了这一点。一句话:我“需要”从我的应用程序中查询prolog脚本

可能的解决方案

  • 嵌入一个已经存在的用C编写的实现。我不确定这是否会起作用
  • 在另一台机器上执行prolog代码,并使用网络查询prolog
  • 似乎可以在应用程序中运行某种类型的Ruby VM(据我所知,shinycocos使用这个),这可以用于运行Ruby Prolog实现吗
  • 找到Prolog的替代方案。这需要给我一些与prolog相同的可能性
可悲的是,谷歌几乎没有给我任何结果,所以我有一种感觉,我可能会在这个项目上相当孤独。如果有人有任何经验或线索,我将非常感谢。

您可以下载源代码并使用XCODE for iOS平台编译。我从来没有这样做过,但这在技术上是完全可能的


一旦你做了,就有很多例子,如何从<强> C/C++ +>强>中运行Prolog代码,因此,你可以从Objul-C.</P> < P>运行Prolog,因为调用Prolog代码遇到了类似的困难,尽管在不同的情况下,我建议检查Casor C++库。这允许您在本机C++中编写逻辑范例代码,而不需要扩展语言。因为Casor是一个头文件库,所以无论C++在哪里,都很容易编译。


Castor网站:

半年后,我只想就此提供一些见解。最后,我用Java编写了一个带有prolog接口的服务器,通过TCP接受prolog调用。它的工作原理几乎与SWI prolog(以及其他)提供的实时prolog解释器完全相同,并且大多数情况下工作得相当好。然而,这远远不是一个最优的解决方案,因为您不能从prolog内部调用函数。你失去了双向沟通的可能性


如果我重新开始,我肯定会更加努力地为iOS编译一个纯C实现。我很快就尝试了一下,但由于缺乏经验,我甚至无法消除所有的错误。从不能让prolog在未修改的iOS版本上作为后台进程运行这一事实来看,必须进行一些重大重写。因此,您可能需要从头开始编写一个新的实现(可能是受到一些更轻量级实现的启发)来获得完美的解决方案。

FYI,如果您使用JPL,您可以非常轻松地在Java和SWI Prolog之间进行双向调用:

它也是完全可重入的,所以您可以从java实例化prolog代码,而java代码又会实例化java代码等等

几年前,当我被要求将基于Prolog的推理引擎连接到大量Java代码时,我为许多商业项目做了这项工作


它确实使用JNI(Java本机接口),因此您需要注意如何编译和链接到本机api。不过,如果您为每个平台适当地编译它,就可以使它跨平台工作。我让它在OS-X、Windows、Linux和Solaris上运行。

我不知道是否已经尝试过,但有可能在移动应用程序和TaupLog中使用NodeJ组合:


你介意分享一个用Ruby编写的Prolog实现的链接吗?我自己没有尝试过任何一个,但在google上快速搜索后,我得到了以下结果:啊,是的,谢谢。很久以前,我看到一些“微小的prolog”实现与之非常相似,但我认为它们无法与成熟的系统(如SWI prolog、YAP、SICStus prolog和c)相比。尽管这听起来是一个很好的解决方案,但我的主管遗憾地不会接受它。我们在prolog中已经有了一个很大的知识库,移植它会花费太多的时间。@Bendik解析prolog有多难?如果不是太困难,你可能会用代码生成方法自动生成相关的Casor C++代码。@ StutLe77将像从WAM移植到Casor一样。我给它一个诚实的尝试,但是遗憾的是,如果没有不存在的话,我对C、C++和编译的知识没有IDE是有限的。我最终实现了一个网络解决方案,它使用套接字和一个服务器作为知识库。我不明白,为什么Java会出现这种情况?通过几行代码,您还可以拥有一个基于SWI的HTTP服务器(请参阅),因为并非所有通过TCP发送的文本都由prolog解析。我需要通过“应用程序级命令”控制某些行为的能力。此外,我更喜欢用Java编写代码,因此Java接口为我提供了一种舒适的方式,可以在不增加太多开销的情况下坚持已知代码。仅供参考,如果使用JPL,您可以非常轻松地在Java和SWI Prolog之间进行双向调用: