Prolog中的“语法错误:操作员期望”

时间:2011-05-21 15:44:30

标签: prolog

我有这个图表结构表示Prolog中的数据流。

  • 我有一个从节点1到2,1到3等的边缘
  • 变量x在节点1中定义,变量t在节点4中定义,等等。
  • 变量d用于节点4,变量x用于节点7等

函数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 ] ) .

1 个答案:

答案 0 :(得分:12)

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

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