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

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

Все программы выполняются на процессоре, который исполняет инструкции друг за другом. Специальный регистр указывает на номер текущей команды, после ее выполнения счетчик увеличивается. Исключение составляют команды условного или безусловного перехода, с их помощью в реализуется ветвление и все виды циклических конструкций. Таким же поведением обладают программы на ассемблерах, а также всех императивных языках – таких как C++, Java, Pascal.

В языках логической парадигмы программирования передача управления (определяющая порядок вычисления) осуществляется по другим принципам, основанным на логике предикатов. Функции языка Prolog называются предикатами, они могут быть истины или ложны (завершаться удачей или нет). Примеры предикатов:

фрукт(апельсин).
фрукт(яблоко).
фрукт(груша).

В данном случае предикат фрукт состоит из трех частей, соединенных точкой, эквивалентной логическому ИЛИ. Программу на Prolog удобно рассматривать в виде дерева, при этом узлами являются операторы и составные части предиката. Так, пример приведенный выше мог быть изображен следующим образом:
prolog-predicates
Части, которые расположены в коде раньше – помещаются в дереве левее. При исполнении программы, интерпретатор обходит дерево слева направо, до тех пор, пока не сможет установить истинность формулы.

Если мы сделаем запрос фрукт(вишня), то вишня будет сопоставлено последовательно с каждым фруктом, после того, как груша будет обработана интерпретатор установит, что вишня не является фруктом, следовательно предикат завершится неудачей.

Запрос может содержать оператор NOT, инвертирующий результат, так при запросе NOT(фрукт(вишня)) интерпретатор обработает первую часть предиката, установит что вишня не является апельсином и вернет истину. Такой результат может быть передан в код, инициировавший запрос, если результат по каким-либо причинам не подойдет, то интерпретатор может вернуться назад и попробовать перебрать другие виды фруктов.