Язык Пролог
 
Процедурным языки задают компьютеру явную последовательность действий, которую нужно выполнить для решения задачи.

В отличие от этого непроцедурные языки позволяют программисту просто описывать желаемый результат, не задавая точного способа его получения.

Примером непроцедурного языка может служить Пролог (Prolog, от PROgramming in LOGic - программирование в логике), разработанный в 1972 г. Аланом Колмари (Alain Colmerauer) из университета в Лумини (Марсель).

Выдержанный в традициях формальной логики, Пролог приобрел много горячих сторонников в европейских исследовательских центрах по искусственному интеллекту.

При работе с ним программистам не требуется расписывать шаг за шагом процедуры - достаточно просто определить множество фактов и установить отношения между ними, например, что «телега» и «автомобиль», квалифицируются как нечто, называемое «средство передвижения», и что это «средство передвижения» имеет что-то, что называется «колеса».

С помощью этих соотношений процедуры, уже встроенные в язык, получают логический вывод о том, что, скажем, «автомобиль» имеет «колеса». Эта особенность делает Пролог очень удобным для написания некой разновидности программ, получивших название «экспертные системы» - наиболее значимый в коммерческом отношении результат, полученный в исследованиях по искусственному интеллекту.

Строя логические выводы на основе человеческих знаний, введенных в программу, экспертные системы добиваются успехов в таких областях деятельности, как диагностика заболеваний, поиск месторождений полезных ископаемых.

По существу все языки обработки списков, а также Пролог возникли в академических сферах. Два других важных универсальных языка обязаны своим рождением исследовательским лабораториям гигантских корпораций.

Дескриптивные языки: ничего, кроме фактов

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

Программа на дескриптивном языке состоит из двух частей: базы данных и цели. База данных содержит конкретные факты о решаемой задаче и основные принципы, касающиеся соотношений между этими фактами. Цель это общее описание решения; определяя цель, программист, по существу, просит компьютер, посмотрев на факты и соотношения, скомбинировать их так, чтобы можно было доказать, что цель истинна.

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

Методический поиск решения

При выполнении программы, написанной на дескриптивном языке; транслятор вначале сопоставляет запрос пользователя, или цель, с одним из общих принципов или правил, находящихся в базе данных. Затем, беря из базы данных факты, он пытается подставить в найденное правило конкретные значения переменных. Если транслятор обнаруживает правило и множество фактов сопоставимых с запросом, то сообщает об этом, в противном случае неудаче поиска.

Вообще говоря, при поиске ответа на запрос транслятор действует в определенном порядке. Транслятор, сопоставив запрос с правилом, начинает искать подходящие значения элементов правила в последовательности слева направо, делая это до тех пор, пока не удовлетворятся все требования. При повторении запроса в игру вступает новый процесс - так называемый перебор с возвратом, или бэктрекинг. В этом случае транслятор не при ступает к. поиску с самого начала, а возвращается к тому месту в базе данных, где был обнаружен последний подходящий элемент, и возобновляет поиск. Если обнаружить еще один подходящий элемент не удалось, то происходит возврат к ранее найденному элементу, и процесс перебора с возвратом повторяется отсюда.