2011-05-21 109 views
5

我有这种图形结构表示Prolog中的数据流。在Prolog中出现“语法错误:操作员期望”

  • 我有从节点1到2月1日至3日的边缘,等
  • 变量X在节点1中所定义,在节点4变量t等
  • 变量d是在节点使用4,节点7中的变量x等

功能definition_clear_path应该计算任何变量的definition-clear path

当我运行此我得到以下错误:

definition_clear_path/3: Undefined procedure: definition_clear_path1/4 
     However, there are definitions for: 
       definition_clear_path/3 

当我输入definition_clear_path1来自终端的规则,我得到Syntax error: Operator expected。为什么?

edge(1, 2). 
edge(1,3). 
edge(3,7). 
edge(3,4). 
edge(4,6). 
edge(4,5). 
edge(7,x). 
def(p,1). 
def(e,1). 
def(d,1). 
def(x,1). 
def(c,1). 
def(d,4). 
def(t,4). 
def(c,5). 
def(x, 6). 
def(c,6). 
use(d,3). 
use(e,3). 
use(d,4). 
use(c,4). 
use(x,4). 
use(t,4). 
use(c,5). 
use(x,6). 
use(c,6). 
use(d,6). 
use(x,7). 
pos_path(X,Y, [X,Y]):- edge(X,Y). 
pos_path(Start, End, [Start|T]) :- edge(Start,Mid), pos_path(Mid, End, T). 


definition_clear_path(Node , J , Var):- definition_clear_path1(Node , J , Var , [ Node ]) . 

definition_clear_path1(B , J, K , F):- edge (B , J). 

definition_clear_path1(Node , J , Var , L):- 
edge (Node , N1) , 
not(def(Var , N1)) , 
not(use(Var , N1)) , 
definition_clear_path1(N1 , J , Var , [ Node | L ]) . 
+0

如果将definition_clear_path放在最后,错误会消失吗? – 2011-05-21 16:04:24

+0

不,同样的错误。 – 2011-05-21 16:23:51

回答

12

删除edge与左括号之间的空格。

空格分隔术语,所以Prolog会认为edge是一个运算符而不是复合项的函子。

相关问题