C# C语言中SWI-PROLOG的问题#

C# C语言中SWI-PROLOG的问题#,c#,prolog,swi-prolog,C#,Prolog,Swi Prolog,我想为C#使用SWI PROLOG包装器。我的朋友在普通的SWI prolog上用prolog创建了一些代码。我想在c#中使用SwiPLCs.dll执行此操作。我想让他的代码成为我的知识库 我在看演示代码。他们通过的序言是这样的: PlQuery.PlCall("assert(father(martin, inka))"); :- dynamic(releases/4),dynamic(preserve/3). neg(X,Y) :- sneg(Y,X). neg(X,Y) :- sneg(

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

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

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(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(代码中的行)”

在第一行,我得到一个例外:

assert/2: Uninstantiated argument expected, found dynamic preserve/3 (2-nd argument)
Syntax error: Operator expected\nassert(neg(X,X) :- !,fai\n** here **\nl.\r
在第四行,我得到一个例外:

assert/2: Uninstantiated argument expected, found dynamic preserve/3 (2-nd argument)
Syntax error: Operator expected\nassert(neg(X,X) :- !,fai\n** here **\nl.\r

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

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

PlQuery.PlCall("assert((line_of_code))");
这会解决你的一些问题

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

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