SWI PROLOG用于C#的问题

时间:2014-06-02 00:46:52

标签: c# prolog swi-prolog

我想在C#中使用SWI PROLOG包装器。我的朋友在普通SWI PROLOG的prolog中创建了一些代码。我想使用SwiPLCs.dll在c#中执行此操作。我想从他的代码中获取我的知识库。

我在看演示代码。他们正在通过这样的序言:

PlQuery.PlCall("assert(father(martin, inka))");

我的朋友代码看起来像这样:

:-  dynamic(releases/4),dynamic(preserve/3).
neg(X,Y) :- sneg(Y,X).
neg(X,Y) :- sneg(X,Y).
neg(X,X) :- !,fail.
inertial(X) :- sinertial(X).
inertial(X) :- neg(X,Y),
           sinertial(Y).

它要长得多,但我粘贴了几行。我用这个调用包装了所有行:PlQuery.PlCall(" assert(line_of_code)");

在第一行我得到了这个例外:

assert/2: Uninstantiated argument expected, found dynamic preserve/3 (2-nd argument)

在第4行,我得到了这个例外:

Syntax error: Operator expected\nassert(neg(X,X) :- !,fai\n** here **\nl.\r

我做错了什么?我只是想执行一些固定的代码来初始化我的prolog引擎。我可以像普通的prolog代码一样简单地执行它,然后使用这个包装器的功能吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试添加更多括号:

PlQuery.PlCall("assert((line_of_code))");

这可以解决你的一些问题。

但是如果引擎可以访问源文件,那么查询它就更简单了

PlQuery.PlCall("consult('"+file_path+"')");