- •ПрОграммирование в лоГике
- •1. Факты и правила
- •2. Запросы (цели)
- •3. Переменные
- •4. Комментарии (слайд 7)
- •5. Основные разделы программ (слайд 8)
- •6. Стандартные домены
- •7. Сопоставление и унификация
- •8.1 Основные правила поиска с возвратом
- •8. Поиск с возвратом
- •8.2 Управление поиском решений
- •8.2.1 Предикат fail
- •8.2.2 Отсечение (cut)
4. Комментарии (слайд 7)
Многострочные комментарии должны начинаться с символов «/*» и заканчиваться символами «*/». Однострочные комментарии можно начинать с символа «%».
5. Основные разделы программ (слайд 8)
раздел DOMAINS (доменов);
раздел PREDICATES (предикатов);
раздел CLAUSES (предложений);
раздел GOAL (целей).
Раздел целей аналогичен телу правила и представляет собой список подцелей, представленных в виде запроса. Цель отличается от правила тем, что за ключевым словом GOAL не следует знак «:-» и при запуске программы Visual Prolog автоматически выполняет цель.
Раздел предложений. Все предложения (и факты, и правила) для каждого предиката в данном разделе должны располагаться вместе. Последовательность предложений, описывающих один предикат, называется процедурой.
Раздел предикатов. Здесь перечисляются все предикаты, отличные от стандартных (встроенных в Visual Prolog) и используемые в программе. Предикаты должны быть перечислены с указанием типов (доменов) их аргументов.
Объявление предиката содержит:
1) имя предиката – последовательность латинских букв, цифр и символа подчеркивания, начинающаяся с прописной буквы. Длина имени не может быть больше 250 символов. В именах запрещено использовать такие символы, как «пробел», «-», «*» и т.п.;
2) список доменов (типов) аргументов предиката, заключенный в круглые скобки.
Арность предиката – это количество аргументов, которые он принимает. В программе можно использовать два предиката с одним и тем же именем, но отличающиеся арностью.
Объявление предиката не заканчивается точкой. Доменами (типами) аргументов могут быть либо стандартные домены, либо домены, объявленные в разделе domains.
Например,
увлечение(человек, действие)
color(symbol)
мой_предикат(integer, symbol)
Раздел доменов. Домены позволяют задавать разные имена различным видам данных.
Например, если в разделе описания предикатов объявлен предикат
увлечение(человек, действие)
то выше надо описать в разделе доменов
DOMAINS
человек, действие = symbol
Одно из преимуществ объявления собственных доменов заключается в том, что компилятор может отслеживать ошибки типов (слайд 9):
DOMAINS
имя, пол = symbol
возраст = integer
PREDICATES
человек(имя, пол, возраст)
ровесник(X, Y) :- человек(X, Pol, Let), человек(Pol, Y, Let).
Здесь переменная Pol указана в одном правиле при обращении к разным типам данных. Отсюда мы делаем однозначный вывод: если переменная в предложении используется более чем в одном предикате, она должна быть одинаково объявлена в каждом из них.
6. Стандартные домены
Таблица 2.
Домен |
Описание |
Значение |
short |
короткое, знаковое, количественное |
-32 768 .. 32 767 |
ushort |
короткое, беззнаковое, количественное |
0 .. 65 535 |
long |
длинное, знаковое, количественное |
-2 млрд. .. 2 млрд. |
ulong |
длинное, беззнаковое, количественное |
0 .. 4 млрд. |
integer |
знаковое, количественное |
или -32 768 .. 32 767 или -2 млрд. .. 2 млрд. |
unsigned |
беззнаковое, количественное |
или 0 .. 65 535 или 0 .. 4 млрд. |
byte |
|
0 .. 255 |
word |
|
0 .. 65 535 |
dword |
|
0 .. 4 млрд. |
char |
символ, заключенный в апострофы |
|
real |
число с плавающей десятичной точкой (эквивалентен типу double в C) в интервале: 10-307 .. 10308 |
|
string |
|
|
symbol |
то же, что и string |
|
