我有这个图表结构表示Prolog中的数据流。
函数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 :(得分:12)
删除edge
与左括号之间的空格。
空格分隔术语,因此Prolog会认为edge
是运算符而不是复合项的函子。