2010-03-11 78 views
4

如果我想使规则动态,所以我可以在数据库文件加载后使用断言,我该怎么做?我使用XSB Prolog的此刻,该文件是这样的:序言中的“动态”谓词

:- dynamic likes/2 

likes(mary,tom) 

当我尝试协商,XSB文件我得到一个错误:

​​

任何想法?

回答

7

动态谓词按照您的预期工作,所以如果它不适合您,它还有其他错误。

如果test.P看起来是这样的:

:- dynamic likes/2. 

likes(mary,tom). 

可以咨询,然后更喜欢/ 2的事实可以断言:

XSB Version 3.2 (Kopi Lewak) of March 15, 2009 
[i686-pc-linux-gnu; mode: optimal; engine: slg-wam; scheduling: local; word size: 32] 

| ?- consult('test.P'). 
[Compiling ./test] 
[test compiled, cpu time used: 0.0440 seconds] 
[test loaded] 

yes 
| ?- assert(likes(mary, bob)). 

yes 
| ?- likes(X,Y). 

X = mary 
Y = tom; 

X = mary 
Y = bob; 
+0

这就是真的相当奇怪 - 我也一样东西,它会抛出这种奇怪的错误!我试图理解,“不允许等等等等......”意思是! – KP65 2010-03-12 12:45:21

+0

我刚刚用XSB 3.2版测试了相同的文件,它似乎工作正常,但我必须使用2.7.1作为其他即时通讯使用似乎需要它(interprolog)..你可以尝试在2.7.1和让我知道你看到了什么? 谢谢 – KP65 2010-03-12 13:06:58

+0

我试过使用XSB 2.7,并且也得到了错误,所以自该版本以来行为发生了变化。但是,我能够用load_dyn('test.P')加载文件,它将整个文件加载为动态而不是编译它。 (从文件中删除: - 动态行。)除了test.P.之外,还可以声明更多的喜欢/ 2规则。有关加载动态代码的文档,请参阅此处:http://www.cs.sunysb.edu/~sbprolog/manual2/node5.html – 2010-03-12 19:10:46