Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1414-Лекции.doc
Скачиваний:
30
Добавлен:
25.12.2018
Размер:
419.84 Кб
Скачать

5.2.3.3 Раздел доменов

Раздел domains предназначен для объявления доменов, описывающих типы областей значений используемых в программе объектов (термов). Например, если мы хотим определить предикат person(familia, pol, vozrast) характеризующий людей (person) с точки зрения фамилии (familia), пола (pol) и возраста (vozrast), и позволяющий описывать конкретные факты о людях в разделе clauses программы, то необходимо в разделе domains программы объявить соответствующие этим термам типы доменов:

domains

familia, pol = symbol

vozrast = integer

5.2.3.4 Раздел предикатов

Раздел predicates предназначен для объявления предикатов пользователя с указанием имени предиката и его доменов. Домены указываются в скобках и разделяются запятыми. Домены задаются либо явно, либо неявно. Декларация предиката не заканчивается точкой, в отличие от утверждений в разделе clauses.Предикат может состоять и из одного имени. Обычно такие предикаты используются для обозначения цели или заголовка правила. Например, предикат start часто используют в качестве имени программы, а предикат menu может служить заголовком правила, определяющего возможности меню программы.

5.2.3.5 Раздел утверждений

Раздел clauses служит для размещения фактов и правил, которые используются для оперирования этими фактами. Порядок расположения утверждений в разделе clauses не имеет значения, однако важным требованием Турбо-Пролога является расположение утверждений с одноименным предикатом последовательно друг за другом в одном месте программы (т.е. без “разрывов”).

Рассмотрим, например, следующий фрагмент программы:

domains

familia, pol = symbol

vozrast = integer

predicates

person(familia, pol, vozrast)

clauses

person("Петров","муж",35).

person("Волков","муж",21).

person("Полякова","жен",28).

В разделе clauses приведенного фрагмента программы имеется три утверждения-факта с предикатом person. В этих утверждениях на месте аргументов данного предиката, выступающих в роли доменов, появляются конкретные значения: ”Петров”,”Волков” и “Полякова”, принадлежащие домену familia (symbol); “муж”, ”жен”, принадлежащие домену pol (symbol); 35, 21, 28, принадлежащие домену vosrast (integer).

Типы доменов аргументов предиката допускается задавать и непосредственно в предикате, помещая соответствующие ключевые слова типов доменов на месте самих аргументов. В этом случае, например, тот же фрагмент программы будет выглядеть следующим образом:

predicates

person(symbol, symbol, integer)

clauses

person("Петров","муж",35).

person("Волков","муж",21).

person("Поляков","жен",28).

Программа стала короче (раздел domains исчез), раздел clauses не изменился, однако восприятие и понимание программы (особенно в случае большого количества различных предикатов) становится более сложным. Поэтому предпочтительным является описание типов доменов с использованием раздела domains.

Форматы объявления доменов предикатов следующие:

а. Для одного домена:

<имя домена>=<ключевое слово типа домена>

б. Для группы однотипных доменов:

<имя домена1>,…,<имя доменаN>=<ключевое слово типа домена>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]