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

Lye*_*lil 7 prolog

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

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

该函数definition_clear_path应计算任何变量的清晰路径.

当我运行这个时,我收到以下错误:

definition_clear_path/3: Undefined procedure: definition_clear_path1/4
         However, there are definitions for:
               definition_clear_path/3
Run Code Online (Sandbox Code Playgroud)

当我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 ] ) .
Run Code Online (Sandbox Code Playgroud)

Nic*_*ain 12

删除edge左括号和左括号之间的空格.

空格划定术语,因此Prolog会认为这edge是一个运算符而不是复合项的函子.