поведение объединения в прологе при наличии арифметических операторов - PullRequest
3 голосов
/ 16 марта 2011
12 ?- 3+4*5 = X+Y.
X = 3,
Y = 4*5.

13 ?- 3+4*5 = X*Y.
false.

16 ?- 3*4+5 = X*Y.
false.

Я ожидал

13 ?- 3+4*5 = X*Y.
X = 3+4, Y = 5.

16 ?- 3*4+5 = X*Y.
X = 3, Y = 4+5.

Есть ли какая-то проблема "приоритета"?Я использую последний релиз SWI-пролога.

Ответы [ 2 ]

3 голосов
/ 16 марта 2011

Да, существует проблема с приоритетом, которую необходимо учитывать.

Пролог прикрепляет числовое значение приоритета к каждому определенному оператору, чтобы его анализ мог автоматически обрабатываться, например, 3 + 4 * 5так же, как если бы скобки использовались для обозначения 3+ (4 * 5).

Таким образом, ваш первый пример сработал так, как ожидалось, но не второй или третий.Не было никакого способа объединить термины, поэтому Пролог вернул false.

1 голос
/ 16 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...