Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Упражнение.

Улучшите приведенную программу так, чтобы она также печатала даты

рождения перечисленных людей. Затем добавьте в отчет телефонные номера.

Объявление доменов составных объектов.

В этом разделе мы покажем как определяются объекты. После компиляции

программы, которая содержит следующие отношения:

имеет(джон,книгу("Отсюда в Вечность","Джеймс Джонс")).

и

имеет(джон,лошадь(блеки)).

вы должны послать системе запрос в следующем виде:

имеет(джон,Х).

переменная Х может быть связана с разными типами объектов: книга, лошадь

и, возможно, другие объекты, которые вы определите. Из-за этого вы не мо-

жете более использовать старое определение предиката "имеет":

имеет(symbol,symbol).

Второй элемент более не является объектом типа symbol. Вместо этого

вы можете дать новое определение этого предиката, такое как:

имеет(symbol,artisles)

Вы можете описать домен artisles в секции domains так, как показано

здесь:

domains

articles=книга(заглавие,автор); лошадь(имя)

заглавие,автор,имя = symbol

Точка с запятой читается как "или". В этом случае, возможны два ва-

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

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

дартный тип symbol.

Другие варианты могут быть легко добавлены к определению домена.

Нaпример, articles может также включать лодку, дом, чековую книжку. Лодку

можно определить функтором без присоединенных к нему аргументов. С другой

стороны, вы можете включить платежный баланс, как часть чековой книжки.

Определение домена artisles расширится до:

articles = книга(заглавие,автор); лошадь(имя);

лодка; чековая_книжка(баланс)

заглавие,автор,имя = symbol

баланс = real

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

объекты из домена artisles могут использоваться в фактах, которые опреде-

ляют предикат имеет

/* программа CH06EX04.PRO */

domains

articles = книга(заглавие,автор); лошадь(имя);

лодка; чековая_книжка(баланс)

заглавие,автор,имя = symbol

баланс = real

predicates

имеет(джон,книга("Друг семьи","Ирвин Шоу")).

имеет(джон,лошадь(блеки)).

имеет(джон,лодка).

имеет(джон,чековая книжка(1000)).

A теперь скомпилируйте и запустите программу (предварительно испра-

вив русские имена на латинские [прим.перев.]). по приглашению Goal: пош-

лите базе данных следующий запрос:

имеет(джон,Вещь).

Турбо Пролог оветит:

Вещь=книга("Друг семьи","Ирвин Шоу")

Вещь=лошадь(блеки)

Вещь=лодка

Вещь=чековая книжка(1000)

4 решения.

Запись определений доменов: Обзор.

Здесь дано общее представление о том, как писать объявления доменов

для составных объектов:

домен = вариант1(Д,Д,... );

вариант2(Д,Д,... );

...

Здесь вариант1 и вариант2 допустимые (но разные) функторы. Запись

(Д,Д,...) представляет список имен доменов, которые объявлены где-то в

программе, или являются стандартными типами доменов (такие как

symbol,integer,real,string или char).

Замечания:

1. Варианты разделяются точкой с запятой.

2. Каждый вариант состоит из функтора и, возможно, списка доменов

соответствующих аргументов.

3. Если функтор не имеет аргументов, вы можете записать в вашей

программе вариантN или вариантN(). В книге везде используется первый

вариант синтаксиса.

Соседние файлы в папке Документация