在Obj-C项目中嵌入Prolog引擎

3
我正在寻找一个轻量级的Prolog引擎,可以嵌入到Mac OSX下的Obj-C应用程序中。
在Java中有一些非常出色的实现,具有我需要的特性:可部署性、轻巧、动态配置性、与Java集成和易于互操作性。您能否推荐类似的C/C++实现?

经过多次搜索,我找到了YAProlog,并且在这里阅读后,似乎可以将其用作库从其他程序中调用。但是(愚蠢的问题):

  1. 我对UNIX不熟悉,不知道如何使用YAP手册中的那些命令生成libyap.a文件...
  2. 然后我可以将libyap.a复制到我的Xcode项目中并使用它吗?
2个回答

3

GProlog支持Mac OS X(Darwin),并且有适用于Mac OS X Leopard的安装程序。在这里,您可以阅读如何从C中调用gprolog(还要阅读这个)。然后,您可以使用gcc而不是使用gplc,前提是您添加了适当的链接选项,这可能有点“棘手”需要找到;因此,您可以使用gplc生成对象文件,然后将所有内容粘合在一起...

关于YAP:

1)通常情况下,使用autoconf打包的软件包只需使用以下“序列”命令进行编译

./configure
make

最后执行make install命令将安装所有内容,需要有权限的用户执行。手册建议创建一个ARCH(ARCH.?)目录并从那里执行所有操作(因此使用../configure而不是./configure)。 configure脚本通常接受选项,请查看它们。特别检查LIBDIRYAPLIBDIR所在的位置。
因此,一旦您拥有源代码tarball(源代码的.tar.gz),您应该对其进行解压缩,例如tar -xzf Yap-5.1.3.tar.gz命令适用于GNU/Linux,相同的tar也应该适用于Mac OS X...
让我们查看./configure --help并查看是否有您想要在继续之前使用的有趣选项。
现在,让我们遵循手册的建议(即使它对我来说看起来很奇怪;-))。
mkdir ARCH.  # I would put GNUlinux, or maybe
             # the name must be exactly this?
cd ARCH.
../configure

你等待...目录中会填充下一步所需的所有内容。查看创建的Makefile,你会看到类似以下的行:
#
# where YAP should look for binary libraries
#
LIBDIR=$(EROOTDIR)/lib
YAPLIBDIR=$(EROOTDIR)/lib/Yap

在Makefile的目标中,我还可以看到libYap.a。所以,尝试运行make命令(我不会这样做来检查可能出现的问题,也因为我使用的是GNU/Linux,解决问题的方法可能有所不同)。最后,你应该得到libYap.a,然后成为“root”(管理员)并执行以下操作:

make install

install目标中(对我来说确切地说是install_unix),我读到了$(INSTALL_DATA) -m 755 libYap.a $(DESTDIR)$(LIBDIR),这意味着你的.a已经安装好了,可以被编译器使用,前提是你知道库的位置(并且你知道它,在上面看到并记住配置选项)。
当然,你也可以直接将它复制到需要的位置并“直接”使用它,但由于它是通过make install“规范”安装的,因此应该像使用任何其他“系统范围”库归档文件一样使用它。

0
手册中的SWI-Prolog外部语言接口部分有一个条目嵌入其他应用程序中的SWI-Prolog。至于从Objective C调用,它应该可以像调用任何C代码一样容易实现。

12.4.23 在其他应用中嵌入SWI-Prolog

在嵌入式Prolog中,我们指的是“主”程序不是Prolog应用程序的情况。Prolog有时会被嵌入到C、C++、Java或其他语言中,以在更大的应用程序中提供基于逻辑的服务。嵌入将Prolog引擎作为库加载到外部语言中。Prolog本身只提供与C语言(与C++兼容)的嵌入。使用JPL可通过Java和Prolog C接口之间的C-glue实现Java中的嵌入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接