Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программы классификации 49 9 Программа классифи...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
944.13 Кб
Скачать

2.4.1. Секция Domains

Эта секция является в некотором смысле аналогом описания типов алгоритмических языков, но со своими отличиями, преимуществами и, соответственно, недостатками. Поскольку описание типов всегда следует в начале программы, Пролог в этом смысле не является исключением. На первых порах нужно, наверно, запомнить, что для объявления секции domains используются всего четыре следующих способа (формата):

1. Первый формат используется для объявления объектов, которые синтаксически схожи, а семантически различны.

2. Второй формат используется для объявления списков – одной из основных структур данных Пролога.

3. Третий формат описывает сложную область определения, задает описание структур, позволяет также рекурсивно описывать объекты сложных типов (деревьев).

4. Четвертый формат описывает файловый тип для ссылки на файлы по их символическим именам.

Сейчас мы рассмотрим только первый способ, поскольку он нам может понадобиться в скором времени, а остальные отложим до лучших времен, поскольку все равно из головы выветрятся. Описание типов списков рассмотрим сразу же со списками, структурных типов – при подробном знакомстве со структурами, а четвертый файловый тип вообще отложим в долгий ящик, для наших высокоуровневых манипуляций он не потребуется, в Прологе имеется мощное высокоуровневое средство манипулирования внешними файлами.

Первый формат используется для объявления объектов, которые синтаксически схожи, а семантически различны.

domains

name = t ,

где name – имя Пролога, выбираемое пользователем для своей задачи;

t – один из стандартных типов или пользовательских, т.е. ранее определенных domains

Это объявление используется для объектов, которые синтаксически схожи, а семантически различны. Например, первое предложение

domains

age, number = integer

r = real

объявляет два domains целого типа. Объявление вида r = real ускоряет набор программы.

Раздел domains задает область интерпретации предметных переменных, т.е. теперь две переменные, относящиеся одна к типу age, а другая – к number, уже не могут быть сопоставимы, хотя обе остаются переменными целого типа.

2.4.2. Секция Predicates

Здесь указываются все имена предикатов с соответствующими областями определения аргументов. Аргументы дизъюнктов Пролога называются термами. Существует три типа термов: константа, переменная, составной терм (структура). Описание предикатов включает в себя имя предиката и в скобках – перечисление имен предметных переменных

Общий вид описания предиката:

Predicates

name(domain1, domain2, ..., domainN) ,

где name – имя предиката, domain1, domain2, ... domainN – соответственно области определения аргумента1, аргумента2 и т.д. Например:

Predicates

child( string )

mother( string, string ) .

Допускается множественное определение предиката: один и тот же предикат может быть объявлен для различного числа аргументов:

Predicates

hanoi

hanoi( integer )

В этом случае для каждого предиката требуется своя реализация, т.е. это по сути два разных предиката с одним и тем же именем.

Также можно объявить один предикат для аргументов разных типов:

Predicates

member( name, namelist )

member( number, numberlist )

В этом случае отдельной реализации не потребуется.