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

时间:2014-09-19 15:43:17

标签: c gnu-prolog

我想基于使用Prolog谓词的C-File构建可执行文件。我想使用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);
}

使用

编译
gplc examp.pl examp_c.c

调用可执行文件时,启动/模拟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程序的参数提交或在内部生成。

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

你知道,我刚开始作为新手...我很乐意得到一些帮助:-)非常感谢提前。

2 个答案:

答案 0 :(得分:0)

您可以在Prolog文件中使用initialization/1指令来定义在启动时要执行的查询。还有一个--no-top-level链接器选项用于抑制顶级解释器。查看两者的GNU Prolog文档。

答案 1 :(得分:0)

你也可以直接在C中写一个main()然后从C中写出Prolog。 See Defining a new C main function in the manual.