web-dev-qa-db-ja.com

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 ] ) .
7
Lyes Khalil

Edgeと開き括弧の間のスペースを削除します。

スペースは用語を区切るので、PrologはEdgeが複合用語の関手ではなく演算子であると見なします。

12
Nick Main