В моем интерпретаторе пролога загружены следующие два факта:
foo(U+V,1).
foo(U*V,2).
Теперь я пробую следующие запросы с такими результатами:
foo(x*x+x,R). --> R = 1
foo(x+x*x,R). --> R = 1
foo(x*x*x,R). --> R = 2
Теперь я пытаюсь выполнить следующий запрос:
foo(x*x-x,R). --> no
Как я понимаю, это объясняется тем, как приоритет оператора строит выражение дерева:
x+x*x --> + so it matches with --> +
/ \ / \
x * U V
/ \
x x
x-x*x --> - DOES NOT matches any fact.
/ \
x *
/ \
x x
Правильно ли это объяснение?