Небольшая вводная в язык программирования Пролог

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

Возникает вопрос, — а на что нужен этот самый пролог, если уже есть C++, C#, Java и даже php. Пролог бесполезен для написания драйверов, программ с разухабистым GUI, веб приложений. Зато с успехом применяется для решений задач логистики, планирования расписаний, искусственного интеллекта. В общем, инструмент специализированный, при правильном его применении способный творить чудеса.

Классический пример программы на прологе, описание генеалогического дерева:

мужик(банго_беггинс).
мужик(бильбо_беггинс).
мужик(фродо_беггинс).

родитель(банго_беггинс, бильбо_беггинс).
родитель(берилла_боффин, бильбо_беггинс).
родитель(бильбо_беггинс, фродо_беггинс).
родитель(белладонна_тук, фродо_беггинс).

Основа синтаксиса — константы: банго_беггинс, бильбо_беггинс и проч. Константы могут быть также цифрами, строками (строки заключаются в двойные кавычки).
Переменные в прологе, начинаются с прописной буквы или знака подчеркивания, переменная, состоящая просто из подчеркивания «_», означает неименованную переменную (что либо, другими словами).
А теперь сила пролога, определяем предикат «папа»:

папа(X, Y) :- мужик(X), родитель(X, Y).

Т.е. если родитель «мужик», считаем его папой. А теперь, — пример использования:

?- папа(банго_беггинс, бильбо_беггинс). % (спрашиваем у системы)
true. – получаем ответ

Или, например, узнаем кто дети Банго Беггинса:

?- родитель(банго_беггинс, X). % пишем запрос
X = бильбо_беггинс. – получаем правильный ответ

Или, например, узнаем всех пап:

?- папа(X, _). % формируем запрос
X = банго_беггинс ; - получаем первый правильный ответ
X = бильбо_беггинс ; - получаем второй правильный ответ
false – правильные ответы, исчерпаны

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

Comments

comments


Bookmark and Share