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

Раздел предикатов (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 - детерминисти-

ческий*/