Ответ в теме: Принципы построения программ на Prolog

      Комментарии к записи Ответ в теме: Принципы построения программ на Prolog отключены
#2295

В качестве еще одного примера можно рассмотреть функцию поиска максимума из трех чисел:

max3(A, B, C, Max):-
  A > B, A > C, !, Max = A;
  B > C, !, Max = B.
max3(_A, _B, C, Max):-
  Max = C.

Пример дерева программы Prolog

ЕСЛИ A > B И A > C, ТО Max = A
ИНАЧЕ (ЕСЛИ A =< B ИЛИ А =< C) ЕСЛИ В > С, ТО Мах = В
ИНАЧЕ (ЕСЛИ ОБА УСЛОВИЯ ВЫШЕ НЕ ВЫПОЛНИЛИСЬ) Мах = С

Из примера видно, что отсечение можно понимать как логическое следствие, ограничивающее поиск решений если одно решение уже найдено.

В данном случае переменные А, В и С должны быть конкретизированы, т.к. иначе возникнет ошибка при выполнении оператора сравнения (нельзя сравнивать неинициализированные переменные).

Вариант ответа возможен только один, т.к. в каждой ветви алгоритм кроме последней стоят отсечения. Убрать отсечения нельзя, т.к. это приведен к некорректной работе (например, даже если А наибольшее число — будут проверяться B>C и если условие выполнится — то программа вернет в качестве ответа и A, и B {по очереди})