Prolog C# 接口从文件中撤回
Prolog C# Interface retract from file
我刚刚建立了与 SWI Prolog 的连接并想操纵事实。例如收回并声明它们。
我有这样的功能:
String[] param = { "-q" };
PlEngine.Initialize(param);
PlQuery.PlCall("consult('tablets.pl').");
PlQuery.PlCall("assert(tablet(4,newatomic)).");
PlQuery.PlCall("tell('tablets.pl'), listing(tablet/2), told.");
PlQuery.PlCall("retractall(tablet/2).");
PlQuery.PlCall("assert(tablet(1,n1ewatomic)).");
PlQuery.PlCall("assert(tablet(2,n2ewatomic)).");
PlQuery.PlCall("tell('tablets.pl'), listing(tablet/2), told.");
如您所见,该函数按预期用于断言,但不适用于收回。问题是,我想在插入下一个之前从文件中删除所有平板电脑事实(它们是动态的)。 PlQuery.PlCall("retractall(tablet/2).");
此查询必须删除文件中的所有记录。以及如何删除一个事实,例如 tablet(4,newatomic)
,但不删除另一个事实。
执行后的结果文件为:
:- dynamic tablet/2.
tablet(4, newatomic).
tablet(1, n1ewatomic).
tablet(2, n2ewatomic).
嗯,不想删除问题,因为它有两个赞成票。也许对某人有用。
所以,逻辑是正确的。
每当我们想将一些东西附加到数据库时,我们写:
assert(predicat(var1, var2, ... , varn))
每当我们想从数据库中删除一些东西时,我们写:
retract(predicat(var1, var2, ... , varn))
retractall(predicat(var1, var2, ... , varn))
如果所有项都相等,则从数据库中删除它(而且它必须是动态的)
如果我们要删除所有数据,需要通过Variable来指定。所以...
retract(predicat(_,_,...,_))
retractall(predicat(_,_,...,_))
将删除与查询匹配的所有数据。为了保存数据,我们接下来写:
tell('database_file.txt'), %opening file for writing
listing(ig_node), %writing
told. %closing/saving file
我刚刚建立了与 SWI Prolog 的连接并想操纵事实。例如收回并声明它们。
我有这样的功能:
String[] param = { "-q" };
PlEngine.Initialize(param);
PlQuery.PlCall("consult('tablets.pl').");
PlQuery.PlCall("assert(tablet(4,newatomic)).");
PlQuery.PlCall("tell('tablets.pl'), listing(tablet/2), told.");
PlQuery.PlCall("retractall(tablet/2).");
PlQuery.PlCall("assert(tablet(1,n1ewatomic)).");
PlQuery.PlCall("assert(tablet(2,n2ewatomic)).");
PlQuery.PlCall("tell('tablets.pl'), listing(tablet/2), told.");
如您所见,该函数按预期用于断言,但不适用于收回。问题是,我想在插入下一个之前从文件中删除所有平板电脑事实(它们是动态的)。 PlQuery.PlCall("retractall(tablet/2).");
此查询必须删除文件中的所有记录。以及如何删除一个事实,例如 tablet(4,newatomic)
,但不删除另一个事实。
执行后的结果文件为:
:- dynamic tablet/2.
tablet(4, newatomic).
tablet(1, n1ewatomic).
tablet(2, n2ewatomic).
嗯,不想删除问题,因为它有两个赞成票。也许对某人有用。
所以,逻辑是正确的。
每当我们想将一些东西附加到数据库时,我们写:
assert(predicat(var1, var2, ... , varn))
每当我们想从数据库中删除一些东西时,我们写:
retract(predicat(var1, var2, ... , varn))
retractall(predicat(var1, var2, ... , varn))
如果所有项都相等,则从数据库中删除它(而且它必须是动态的)
如果我们要删除所有数据,需要通过Variable来指定。所以...
retract(predicat(_,_,...,_))
retractall(predicat(_,_,...,_))
将删除与查询匹配的所有数据。为了保存数据,我们接下来写:
tell('database_file.txt'), %opening file for writing
listing(ig_node), %writing
told. %closing/saving file