Problems with SWI PROLOG for C#

本文关键字:for PROLOG SWI with Problems | 更新日期: 2023-09-27 18:06:06

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

我在看演示代码。他们的开场白是这样的:

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

My friends的代码是这样的:

:-  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引擎。我可以像普通序言代码一样简单地执行它,然后使用这个包装器的特性吗?

Problems with SWI PROLOG for C#

你可以试着再加一个括号:

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

这应该能解决你的一些问题。

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

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