Почему объединение не работает? пролог - PullRequest
1 голос
/ 03 февраля 2020

Я пытаюсь объединить следующие термины в прологе.

m(2 * 3 + 4) = m(X * Y).

Реакция "ложная".

Почему? Будет ли X = 2 и Y = 3 + 4 не работать?

1 Ответ

2 голосов
/ 03 февраля 2020

Операторы учитывают приоритет: оператор + имеет более низкий приоритет, чем оператор *. Таким образом, это означает, что:

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...