"Синтаксическая ошибка: ожидаемый оператор" в 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

когда я ввожу правило для 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 ответов


убрать пробел между edge и открывающая скобка.

пробелы разделяют термины, поэтому Пролог будет думать, что edge является оператором, а не функтором составного члена.