Пролог - оператор равенства - PullRequest
0 голосов
/ 19 марта 2020
equal(a, b) :- (a = b).

Я определил равным.

1 ?- [index].
true.

2 ?- equal(1, 1).
false.

3 ?- 1 = 1.
true.

Когда я запускаю

equal(1, 1)

, он возвращает false.

Почему он возвращает false и как я могу это исправить?

1 Ответ

1 голос
/ 19 марта 2020

Прежде всего, вы должны написать equal(A, B) :- A = B вместо того, что вы написали. Разница в том, что a и b являются константами, а A и B являются переменными, которые можно объединять со значениями. Я думаю, тогда это должно работать для вашего примера.

Но вы должны заметить, что предикат "=" просто пытается объединить свои аргументы. Поэтому, когда вы спрашиваете «1 = 1», результат равен true, потому что 1 объединяется с 1. Но когда вы спрашиваете «2 + 2 = 4» (или равно (2 + 2, 4)), результат будет ложным, потому что этот оператор делает не оценивать арифметику c операций. Если вы хотите сравнить арифметические c выражения, используйте оператор =: = вместо:

equal(A, B) :- A =:= B.

...