write unificacion reglas operadores listas explicados ejercicios ejemplos prolog operator-precedence

unificacion - Prioridad del operador Prolog y concordancia de reglas



unificacion prolog (1)

Tengo los siguientes dos hechos cargados en mi intérprete de prólogo:

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

Ahora intento las siguientes consultas con esos resultados:

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

Ahora intento con la siguiente consulta:

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

Según tengo entendido, esto se explica por cómo la precedencia del operador construye la expresión del árbol:

x+x*x --> + so it matches with --> + / / / / x * U V / / x x x-x*x --> - DOES NOT matches any fact. / / x * / / x x

¿Es esta explicación correcta?


Si eso es correcto.

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

Si cambiar la precedencia es una gran idea es otra cuestión, 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.