Я только что попытался реализовать абсолютную функцию в Прологе, и у меня странное поведение. Мой код был:
absval(X, RESULT) :- X >= 0, RESULT is X.
absval(X, RESULT) :- X < 0, RESULT is -X.
И когда я пробую в SWI-Prolog absval(-2,X).
получаю
X = 2
yes
как и ожидалось. Но в противном случае, когда я вызываю absval(2,X)
, я получаю X = 2 ?
, и мне нужно вставить другой ввод. После нажатия Enter у меня тоже yes
.
Что значит второй результат? Что не так с моим решением?
absval/2
есть два правила. Итак, после того, как Prolog удовлетворяетabsval(2,X)
, используя первое правило, он возвращается назад, чтобы повторно достичь цели. Первая подзадача(X < 0)
второго правила не удастся, и вы не получите второго решения. Для детерминированного поведения добавьте оператор вырезания послеX>=0
, например:absval(X, RESULT) :- X >= 0, !, RESULT is X.
. - person Tudor Berariu   schedule 17.05.2014