У меня есть эта графическая структура, представляющая поток данных в Прологе.
- У меня есть ребро от узла 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 ] ) .