Предыдущая статья о Прологе была явно поверхностной, попробую реабилитироваться. Ключевые элементы программы на прологе, это: факты и правила. В предыдущем примере фактами были:
мужик(фродо_беггинс).
родитель(банго_беггинс, бильбо_беггинс).
Пример правила, выглядел так:
папа(X, Y) :- мужик(X), родитель(X, Y).
Факты могут иметь и более сложный вид:
родитель(мужик (банго, беггинс), мужик (бильбо, беггинс)).
Структура зависит от представления данных и логики приложения.
Правила, они же, предикаты, они же — утверждения, представляют собой, своего рода формулы:
папа(X, Y) :- мужик(X), родитель(X, Y).
Здесь X, Y — переменные, а запятая между утверждениями, выполняет роль логического «И». Логическое «ИЛИ» записывается как знак точки с запятой «;». Символом точки «.», заканчиваются все предложения (строки) в прологе.
Универсальность использования утверждений, и главное отличие от функций в том как они могут быть использованы. Это проще всего пояснить на примере, опишем предикат, сравнивающий два значения:
compare(X,Y) :- X = Y.
А вот два примера его использования:
?- compare(2,2).
true. – сравниваем два числа, получаем результат ИСТИНА
?- compare(2,X).
X = 2. – задаем одно из чисел и система «догадывается», какое значение сделает условие истинным.
Несколько полезных ссылок:
- SWI-prolog, — отличная кроссплатформенная реализация классического пролога, с интерфейсами для интеграции с C, C++, Java.
- SWI-Prolog-Editor, — в комплекте со SWI-prolog идет emacs, но это IDE будет попроще, к томуже есть разные локализации, в том числе и русская.