假设我有3个节点A,B和C,并且在A和B之间以及B和C之间存在边缘 . 我想在运行时向数据库断言一个新的事实,这样如果A和A之间存在边缘B和B到C的另一个边缘然后我可以从A到C.我想要添加边缘(a,c)但我有以下问题,在此先感谢
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)).
2 回答
在为
edge/2
定义子句之前,必须先声明dynamic
声明 .最后它有效,
: - 动态边缘/ 2 . 边缘(A,B) . 边(B,C) .
conn(X,Y,C): - 边(X,Y),边(Y,C),断言(边(X,C)) .