Операторы учитывают приоритет: оператор +
имеет более низкий приоритет, чем оператор *
. Таким образом, это означает, что:
m(2 * 3 + 4)
анализируется как:
m((2 * 3) + 4)
или более канонически:
m(+(*(2,3),4))
Но это не следует шаблону:
m(*(X,Y))
, следовательно, объединение не удается.
Вы можете объединить это, добавив скобки, например:
?- m(2 * (3+4)) = m(X * Y).
X = 2,
Y = 3+4.