私は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 ] ) .
Edge
と開き括弧の間のスペースを削除します。
スペースは用語を区切るので、PrologはEdge
が複合用語の関手ではなく演算子であると見なします。