Последняя неделя была наполнена впечатлениями от языка Пролог. Раньше сталкивался с этим только поверхностно, но в ближайшем будущем, надеюсь, придется использовать его в реальном проекте. Хочу поделиться впечатлениями и рассказать о базовом синтаксисе. Для людей, которые долгое время имели дело с имперетивными языками (C, JavaScript, C#, etc) это должно быть настоящим переворотом сознания. По началу, кажется что язык написан марсианами. Ни проверок, ни циклов в их классическом представлении, даже функции заменены предикатами.
Возникает вопрос, — а на что нужен этот самый пролог, если уже есть C++, C#, Java и даже php. Пролог бесполезен для написания драйверов, программ с разухабистым GUI, веб приложений. Зато с успехом применяется для решений задач логистики, планирования расписаний, искусственного интеллекта. В общем, инструмент специализированный, при правильном его применении способный творить чудеса.
Классический пример программы на прологе, описание генеалогического дерева:
мужик(банго_беггинс).
мужик(бильбо_беггинс).
мужик(фродо_беггинс).
родитель(банго_беггинс, бильбо_беггинс).
родитель(берилла_боффин, бильбо_беггинс).
родитель(бильбо_беггинс, фродо_беггинс).
родитель(белладонна_тук, фродо_беггинс).
Основа синтаксиса — константы: банго_беггинс, бильбо_беггинс и проч. Константы могут быть также цифрами, строками (строки заключаются в двойные кавычки).
Переменные в прологе, начинаются с прописной буквы или знака подчеркивания, переменная, состоящая просто из подчеркивания «_», означает неименованную переменную (что либо, другими словами).
А теперь сила пролога, определяем предикат «папа»:
папа(X, Y) :- мужик(X), родитель(X, Y).
Т.е. если родитель «мужик», считаем его папой. А теперь, — пример использования:
?- папа(банго_беггинс, бильбо_беггинс). % (спрашиваем у системы)
true. – получаем ответ
Или, например, узнаем кто дети Банго Беггинса:
?- родитель(банго_беггинс, X). % пишем запрос
X = бильбо_беггинс. – получаем правильный ответ
Или, например, узнаем всех пап:
?- папа(X, _). % формируем запрос
X = банго_беггинс ; - получаем первый правильный ответ
X = бильбо_беггинс ; - получаем второй правильный ответ
false – правильные ответы, исчерпаны
И это только вершина айсберга. На Прологе можно писать весьма лаконичные программы. Я рекомендую его всем программистам, кто начинает ощущать «ржавение мозга», застой и нехватку идей. Просто для расширения кругозора и обогащения новыми идеями.