«Синтаксическая ошибка: ожидается оператор» в Прологе - PullRequest
7 голосов
/ 21 мая 2011

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

  • У меня есть ребро от узла 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 Ответ

12 голосов
/ 21 мая 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...