17

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

目的

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

可能的解决方案

  • 嵌入一​​个已经存在的用 C 编写的实现。我不确定这是否可行。
  • 在另一台机器上执行prolog代码,使用网络查询prolog。
  • 似乎可以在应用程序内运行某种 Ruby VM(据我了解,shinycocos 使用它),这可以用来运行其中一个 Ruby Prolog 实现吗?
  • 寻找 Prolog 的替代品。这需要给我一些与 prolog 相同的可能性。

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

4

5 回答 5

6

半年后,我只想提供一些见解。我最终用 Java 编写了一个带有 prolog 接口的服务器,通过 TCP 接受 prolog 调用。它的工作方式几乎与 SWI-prolog (以及其他)提供的现场 prolog 解释器完全相同,并且大部分工作得很好。但是,它远非最佳解决方案,因为您无法从 prolog 内部调用函数。你失去了双向沟通的可能性。

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

于 2011-06-13T09:04:57.107 回答
6

尽管在不同的情况下,在调用 prolog 代码时遇到了类似的困难,但我建议您查看 castor c++ 库。这使您可以在本机 C++ 中编写逻辑范例代码,而根本不需要扩展语言。由于 castor 是一个只有头文件的库,所以在任何 c++ 可用的地方都很容易编译。
Castor 网站:http ://www.mpprogramming.com/cpp/default.aspx

于 2010-10-11T16:29:05.457 回答
4

您可以下载SWI-Prolog 的源代码,并使用 XCODE for iOS 平台进行编译。我从来没有这样做过,但这在技术上肯定是可行的。

一旦你这样做了,有很多关于如何从C/C++运行 prolog 代码的示例,因此,你将能够从 Objective-C 运行 prolog。

于 2010-10-11T11:02:37.747 回答
2

仅供参考,如果您使用 JPL,您可以很容易地在 Java 和 SWI-Prolog 之间进行双向调用:

http://www.swi-prolog.org/packages/jpl/

它也是完全可重入的,因此您可以从 java 实例化 prolog 代码,进而实例化 java 代码等...

几年前,当我需要将基于 Prolog 的推理引擎连接到大量 Java 代码时,我为一些商业项目这样做过。

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

于 2012-06-15T12:54:17.650 回答
1

我不知道这是否已经尝试过,但有可能将 NodeJS 用于移动应用程序和 TauProlog 的组合:

在此处输入图像描述

在此处输入图像描述

于 2020-09-02T09:08:21.417 回答