logo
Раздел описания предикатов внутренней базы данных

1. Общие сведения о PROLOG

Название языка "PROLOG" происходит от слов логическое программирование (PROgramming in LOGic -- в английском).

В истории возникновения и развития языка PROLOG можно выделить следующие этапы.

В 1965 году в работе "A machine oriented logic based on the resolution principle", опубликованной в 12 номере журнала "Journal of the ACM", Дж Робинсон представил метод автоматического поиска доказательства теорем в исчислении предикатов первого порядка, получивший название "принцип резолюции".

В 1973 году "группа искусственного интеллекта" во главе с Аланом Колмероэ создала в Марсельском университете программу, предназначенную для доказательства теорем. Эта программа использовалась при построении систем обработки текстов на естественном языке. Программа доказательства теорем получила название PROLOG (от Programmation en Logique). Программа была написана на Фортране и работала довольно медленно.

В 1976 г. Роберт Ковальский вместе с его коллегой Маартеном ван Эмденом предложил два подхода к прочтению текстов логических программ: процедурный и декларативный.

В 1977 году в Эдинбурге Уоррен и Перейра создали очень эффективный компилятор языка PROLOG для ЭВМ DEC-10, который послужил прототипом для многих последующих реализаций PROLOG. Что интересно, компилятор был написан на самом PROLOG. Эта реализация PROLOG, известная как "эдинбургская версия", фактически стала первым и единственным стандартом языка. Алгоритм, использованный при его реализации, послужил прототипом для многих последующих реализаций языка. Как правило, если современная PROLOG-система и не поддерживает эдинбургский PROLOG, то в ее состав входит подсистема, переводящая прологовскую программу в "эдинбургский" вид. Имеется, конечно, стандарт ISO/IEC 13211- 1:1995, но его поддерживают далеко не все PROLOG- системы.

В 1980 году Кларк и Маккейб в Великобритании разработали версию PROLOG для персональных ЭВМ.

В 1981 году стартовал вышеупомянутый проект Института по разработке методов создания компьютеров нового поколения.

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

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

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

К императивным языкам относятся такие языки программирования, как Паскаль, Бейсик, Си и т. д. В отличие от них, PROLOG является декларативным языком.

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

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

Наиболее известная у нас в стране и довольно эффективная версия PROLOG -- TURBO PROLOG. Его начинала разрабатывать фирма Borland International в содружестве с датской компанией Prolog Development Center (PDC). Первая версия вышла в 1986 году. Последняя совместная версия имела номер 2.0 и была выпущена в 1988 году.

Самое существенное отличие TURBO PROLOG от эдинбургской версии -- наличие в нем строгой типизации данных для повышения скорости трансляции и выполнения программ.

К достоинствам Турбо Пролога относится возможность присоединять к программе на этом языке процедуры, написанные на Паскале, Си, Фортране или ассемблере.