→ Пошук по сайту       Увійти / Зареєструватися
Знання Пролог

Синтаксис языка


Программа на прологе состоит из предложений.
Предложения, как говорилось выше, бывают трех видов:
1.Факты
2.Правила
3.Вопросы
Все предложения строятся из термов. Термы делятся на два типа: простые и структуры. Простые термы составляют два типа: константы и переменные, константы, в свою очередь, делятся на атомы и числа. Терм является синтаксической единицей. Константы - это поименованные конкретные объекты или отношения. Атомы - аналогичны символам. Атомы могут задаваться:
1) Цепочкой букв, цифр и символом подчеркивания "_", начиная со строчной буквы.
a
sister
x_23
2) специальными символами.
Числа:
Целые (диапазон -32768 32767)
Действительные (диапазон 1Е-307 1Е+308)
Переменные служат для обозначения объектов, значения которых меняются в ходе выполнения программы. Имена переменных могут начинаться:
с прописной буквы
с символа подчеркивания
X
Y
Result
_result
Eсли значение переменной не интересует, то можно использовать анонимные переменные в виде символа подчеркивания "_".
Например,
haschild(X):-parent(X, Y).
Здесь значение Y не интересует, можно записать
haschald(X):-parent(X, _).
Значение анонимной переменной не выводится на печать. Если несколько анонимных переменных, то они все разные. Использование анонимных переменных позволяет не выдумывать имена переменных, когда не надо.
Пусть задано отношение parents для двух родителей.
parents(ann, tom, bob).
Тогда в правиле:
child(X):-parents(_, _, X).
Y, Z - обе анонимные переменные разные.
Область действия переменных - одно предложение.
Одноименные переменные в разных предложениях могут иметь разные значения.
Структура - это единый объект, состоящий из совокупности других объектов, называемых компонентами. Компоненты в свою очередь могут быть также структурами.
Название структуры стоит перед скобками, а компоненты внутри скобок, через запятую. Название структуры - функтор.
Структуры можно использовать для представления геометрических фигур.
точка Р1=point(1, 1)
точка Р2=point(3, 3)
отрезок seg(P1, P2)
или
seg(point(1, 1), point(3, 3))
треугольник triangle(point(2, 5), point(2, 8), point(5, 8))
Структуру можно представить в виде дерева. Корень дерева - главный функтор. Если точка трехмерного пространства: point3(X, Y, Z) Можно записать: point(X, Y, Z) Получается: point(X, Y, Z) и point(X, Y) Это разные термы, т.к. каждый функтор различается двумя параметрами: именем арностью (числом атомов) Поэтому пишут: point/2, point/3 Например, если написано: Отношение point/2 задано .... Это означает, что задано point(_,_) , а не point/2(_,_). Некоторые функторы удобнее записывать, как операторы. Например, можно записать
+(1, 2)
Удобнее записать 1+2 , т.е. в виде оператора. Причем надо понимать, что это не операция сложения, а операторная запись структуры. Такие операторы называются инфиксными. Аналогично операторная запись
2*a+b*c
может быть представлена в виде структуры:
+( *(2, a), *(b, c))
Это и производит пролог при трансляции операторных выражений. Надо четко понимать, что операторы - это другая форма записи структуры.

загрузка...
Сторінки, близькі за змістом