logo
TurboProlog / Документация / TOM_1

Глава 10 подробно объясняет трассирование, однако еще до того, как

вы дойдете до нее, вы захотите использовать этот режим, в частности, при

запуске примеров из нескольких следующих глав.

Хотя, вообще, есть несколько способов использования режима трассиро-

вания, простейшим из них является включение в вашу программу соответству-

ющией директивы компилятора. Для этого в начале своей программы вы можете

расположить одну из следующих директив: trace или shorttrace. Директива

trace будет сообщать о каждом вызове (CALL) и возврате (RETURN), являю-

щихся логической частью работы программы, в то время как shorttrace учи-

тывает некоторые особые действия Турбо Пролога по оптимизации и, поэтому,

сообщает только о некоторых вызовах и возвратах.

Выводы

Ниже приведены основные идеи, представленные нами в этой главе.

1. Программа на Турбо Прологе имеет следующую обобщенную структуру:

domains

/* ...

объявление доменов

... */

predicates

/* ...

объявление предикатов

... */

goal

/* ...

подцель_1,

подцель_2,

и т.д.

... */

clauses

/* ...

предложения (факты и правила)

... */

2. Секция clauses - это та, в которой вы размещаете факты и правила,

с которыми будет работать Турбо Пролог, пытаясь разрешить цель прог-

раммы.

3. Секция predicates - это та, в которой вы объявляете свои предика-

ты и типы (домены) аргументов этих предикатов. Имена предикатов дол-

жны начинаться с буквы (желательно строчной), за которой следует

последовательность букв, цифр и символов подчеркивания (до 250 зна-

ков). В именах предикатов нельзя использовать символы пробела, мину-

са, звездочки, обратной (и прямой) черты. Объявление предиката имеет

следующую форму:

predicates

predicateName(argument_type1, argument_type2, ...,

argument_typeN)

Здесь argument_type1, ..., argument_typeN - либо стандартные домены,

либо домены, объявленные вами в секции domains. Объявление домена

аргумента и описание типа аргумента - суть одно и то же.

4. Секция domains - это та, в которой вы объявляете любые нестандар-

тные домены, используемые вами для аргументов ваших предикатов. До-

мены в Прологе являются аналогами типов в других языках. Основными

стандартными доменами Турбо Пролога являются - char, integer, real,

string и symbol; более подробно стандартные домены описаны в других

главах. Основная форма объявления доменов имеет следующий вид:

domains

argument_type1, ..., argument_typeN = <стандартный домен>

argument_1, ..., argument_N = <составной домен 1>;

<составной домен 2>;

<...>;

<составной домен N>;

(В данной главе не рассматривались составные домены; вы увидите их в

Главе 6.)

5. Секция goal - это та, в которой вы задаете внутреннюю цель своей

программы; это позволяет программе запускаться независимо от среды

разработки. Если внутренняя цель включена в программу, то Турбо Про-

лог выполняет поиск только первого решения, и связываемые с перемен-

ными значения не выводятся на экран.

Если внутренняя цель не используется, то в процессе работы вы будете

вводить в диалоговом окне внешнюю цель. При использовании внешней

цели Турбо Пролог ищет все решения и выводит на экран все значения,

связываемые с переменными.

6. В Турбо Пролог включено более 200 встроенных стандартных предика-

тов и более дюжины стандартных доменов: в случае использования этих

предикатов и доменов у вас нет необходимости объявлять их.

7. Арность (размерность) предиката - это число принимаемых им аргу-

ментов; два предиката с одним именем могут иметь различную арность.

Предикаты с различными версиями арности должны собираться вместе,

причем и в секции predicates и в секции clauses; однако предикаты с

различной арностью рассматриваются как абсолютно разные.

8. Правила имеют форму:

ЗАГОЛОВОК :- <Подцель1>, <Подцель2>, ..., <ПодцельN>.

Для разрешения правила Пролог должен разрешить все его подцели, соз-

дав при этом соответствующее множество связанных переменных. Если же

одна из подцелей ложна, Пролог возвратится назад и просмотрит аль-

тернативные решения предыдущих подцелей, а затем вновь пойдет впе-

ред, но с другими значениями переменных. Это процесс называется "по-

иск с возвратом".

9. Символ Пролога "if" отличается от "IF", используемых в других

языках: правило Пролога работает в соответствии с условной формой

then/if, тогда как оператор других языков IF работает в соответствии

с условной формой if/then.

10. Менее используемыми секциями программ на Турбо Прологе являются

секции database и constants, а также различные глобальные (global)

секции. Кроме этого, вы можете задавать компилятору (в форме дирек-

тив) особые инструкции, располагая их в начале исходного текста ва-

шей программы.