2009-04-20 26 views
6

He los próximos dos hechos cargado en mi intérprete Prolog operador:Prolog precedencia y reglas de concordancia

foo(U+V,1). 
foo(U*V,2). 

Ahora trato de las siguientes preguntas con que los resultados:

foo(x*x+x,R). --> R = 1 
foo(x+x*x,R). --> R = 1 
foo(x*x*x,R). --> R = 2 

ahora trato con el siguiente consulta:

foo(x*x-x,R). --> no 

según entiendo, esto se explica por qué la prioridad de los operadores a construir el árbol de expresión :

x+x*x --> +   so it matches with --> + 
     /\        /\ 
      x *        U V 
      /\ 
      x x 

x-x*x --> -   DOES NOT matches any fact. 
     /\        
      x *         
      /\ 
      x x 

es correcta esta explicación?

Respuesta

4

Sí, esto es correcto.

La precedencia predeterminada del operador se define como natural, es decir, utiliza la precedencia matemática normal. Pero si no te gusta, puedes redefinirlo.

Si cambiar la precedencia es una gran idea es otro asunto, efectivamente cambia la sintaxis de Prolog y puede llevar a problemas de análisis. Especialmente si cambia la precedencia de los operadores por la sintaxis Prolog, con precedencia superior a 1000.