2017-02-16 27 views
0

假设我有3个节点A,B和C,并且A和B之间以及B和C之间存在边缘。我想在运行时断言数据库的新事实,这样如果A和B之间存在边缘,而另一个边缘从B到C,则可以从A到C.我希望边缘(a,c)被添加,但是我有以下问题:预先感谢向数据库添加新的事实PROLOG

dynamic/1: No permission to modify static procedure `edge/2' 
ERROR: [Thread pce] c:/users/win7/documents/prolog/test.pl:6: Syntax error:  Operator expected 

这是我的代码:

edge(a,b). 
edge(b,c). 

:- dynamic edge/2. 

conn :-(X,C):- edge(X,Y),edge(Y,C),assert(edge(X,C)). 
+1

'conn :-(X,C): - ...'是语法错误。 – lurker

回答

0

最后它有效,

: - 动态边缘/ 2。 edge(a,b)。 edge(b,c)。 (X,Y,C): - 边(X,Y),边(Y,C),断言(边(X,C))。

2

dynamic声明必须是第一位的,你定义条款FO前r edge/2