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

Специально заданные предопределенные домены.

Имеется несколько предопределенных доменов; некоторые из них специ-

ально заданы, такие как домены file и bt_selector. Ниже приводится полный

список этих специальных предопределенных доменов:

Таблица 2.2. Специально заданные предопределенные домены.

-----------------------------------------------------------------

dbsedom сгенерированный домен для термов в глобальной базе

данных

bt_selector возвращенный селектор бинарного дерева

db_selector определенные пользователем селекторы внешне й базы

данных

place in_memory; in_ems; in_file

ref сгенерированный домен для ссылок базы данных

file символические имена файлов

reg reg (AX, BX, CX, DX, SI, DI, DS, ES) используется

с bios/4

bgi_ilist список целых чисел, используемых в предикатах BGI

-----------------------------------------------------------------

Сокращение объявлений доменов.

Как уже показано, для объявления стандартного домена name = d, левая

часть объявления доменов (кроме домена file) может состоять из списка

имен:

mydom1, mydom2, ..., mydomN = ...

Эта особенность позволяет вам объявлять несколько доменов одновре-

менно:

firstname,lastname,address=string

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

Ссылочный домен может содержать свободные переменные. Чтобы объявить

ссылочный домен, начните правую часть объявления домена ключевым словом

reference. Если вы объявляете составной домен как ссылочный, то все его

поддомены автоматически объявляются как ссылочные домены.

domains

reflist = reference refint*

refint = reference integer

term = reference int(refint); symb(refsymb)

refsymb = reference symbol

Раздел предикатов (predicates).

В Турбо Прологе разделы, озаглавленные ключевым словом predicates

содержат объявление предикатов. Вы объявляете предикат при помощи его

имени и доменов его аргументов:

predicates

predname(domain1, domain2, ..., domainN)

В этом примере predname представляет собой имя нового предиката, а

domain1, domain2, ..., domainN обозначают домены, стандартные либо опре-

деленные пользователем.

Для одного предиката допускается несколько объявлений. Например, вы

можете объявить, что предикат member работает как с числами, так и с име-

нами, путем задания следующих объявлений:

predicates

member(name, namelist)

member(number, namelist)

В этом примере аргументы name, namelist, number и numberlist являют-

ся определенными пользователем. Альтернативные объявления для member дол-

жны иметь одинаковое число аргументов.

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

hanoi & выбирает по умолчанию 10 кружков

hanoi (integer) & двигает N кружков

Если вы даете более чем одно объявление одному имени, эти объявления

должны идти одно за другим.

Вы можете объявить предикат как детерминистический, вставляя перед

объявлением предиката determ, либо как недетерминистический - вставляя

nondeterm. Если вы объявляете предикат как детерминистический, то компи-

лятор выдает предупреждение, если найдет недетерминистические предложения

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

общую директиву компилятора check_determ. С другой стороны, когда вы оп-

ределяете предикат как недетерминистический, компилятор не будет жало-

ваться, если вы добавите check_determ для контроля других предикатов.

nondeterm repeat /*repeat - недетерминистический*/

determ menuact (Integer, String) /*menuact - детерминисти-

ческий*/

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