2011-05-21 16 views
5

Tengo esta estructura de gráfico que representa el flujo de datos en Prolog."Error de sintaxis: operador esperado" en Prolog

  • tengo un borde desde el nodo 1 a 2, 1 a 3, etc.
  • x variable se define en el nodo 1, t variable en el nodo 4, etc.
  • Variable d se utiliza en el nodo 4, variable x en el nodo 7, etc.

La función definition_clear_path debe calcular el definition-clear path de cualquier variable.

Cuando ejecuto esto me sale el siguiente error:

definition_clear_path/3: Undefined procedure: definition_clear_path1/4 
     However, there are definitions for: 
       definition_clear_path/3 

Cuando entro en la regla para definition_clear_path1 de la terminal me sale Syntax error: Operator expected. ¿Por qué?

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 ]) . 
+0

Si pone definition_clear_path al final, ¿el error desaparece? –

+0

No, el mismo error. –

Respuesta

12

Elimine el espacio entre edge y el paréntesis de apertura.

Los espacios delimitan los términos, por lo que Prolog pensará que edge es un operador en lugar de un factor compuesto.