从C作为独立程序调用(GNU)Prolog的示例

从C作为独立程序调用(GNU)Prolog的示例,c,gnu-prolog,C,Gnu Prolog,我想基于使用Prolog谓词的C文件构建一个可执行文件。我想使用GNU Prolog 我成功地(基于gnu prolog教程)构建了examp_c.c,examp.pl: #include <string.h> #include <gprolog.h> PlBool my_call(PlTerm goal) { PlTerm *arg; int functor, arity; int result; arg = Pl_Rd_Callable_Chec

我想基于使用Prolog谓词的C文件构建一个可执行文件。我想使用GNU Prolog

我成功地(基于gnu prolog教程)构建了examp_c.c,examp.pl:

#include <string.h>
#include <gprolog.h>

PlBool
my_call(PlTerm goal)

{
  PlTerm *arg;
  int functor, arity;
  int result;

  arg = Pl_Rd_Callable_Check(goal, &functor, &arity);
  Pl_Query_Begin(PL_FALSE);
  result = Pl_Query_Call(functor, arity, arg);
  Pl_Query_End(PL_KEEP_FOR_PROLOG);
  return (result == PL_SUCCESS);
}
调用可执行examp时,将启动/模拟Prolog解释器:

GNU Prolog 1.4.4 (64 bits)
Compiled Aug  3 2013, 20:06:22 with gcc
By Daniel Diaz
Copyright (C) 1999-2013 Daniel Diaz
| ?- 
但是我想要的是让一个C程序在内部调用Prolog,而不用通过Prolog解释器与用户通信。Prolog谓词应该作为C程序的参数提交或在C程序内部生成

你知道这方面的例子吗?还是我误解了什么,这不可能吗


你看,我刚开始是新手。。。我很乐意得到一些帮助:-)非常感谢。

您可以在Prolog文件中使用
初始化/1
指令来定义启动时要执行的查询。还有一个
——没有用于抑制顶级解释器的顶级
链接器选项。检查GNU Prolog文档以了解这两个方面。

您也可以直接在C中编写main(),然后从C中删除Prolog。

保罗,也非常感谢你们两位。它起作用了!:-)最后一个问题:使用GnupLog我可以生成一个库(作为windows上的dll)而不仅仅是一个“exe”文件吗?或者,这只能基于SWI Prolog实现吗?
GNU Prolog 1.4.4 (64 bits)
Compiled Aug  3 2013, 20:06:22 with gcc
By Daniel Diaz
Copyright (C) 1999-2013 Daniel Diaz
| ?-