Predicates

Mother(string, string)

Это описание означает, что у предиката два аргумента, причем оба строкового типа:

mother("Наташа", "Даша").

Один предикат может иметь несколько описаний. Это используется, когда требуется, чтобы предикат работал с аргументами различной природы.

Пример. Предикат, проверяющий принадлежность элемента списку.

Predicates

member(integer,integer*)

member(real,real*)

member(char,char*)

member(string,string*)

Такие описания означают, что у предиката два аргумента. При этом возможны четыре варианта использования этого предиката. Первый аргумент может быть целым числом, вещественным числом, символом или строкой, второй аргумент является списком из объектов соответствующего типа. При этом процедура, реализующая этот предикат в разделе описания предложений, будет единственной.

Кроме того, при описании предиката можно указать, будет он детерминированным или недетерминированным. Детерминированный предикат возвращает только одно решение, а недетерминированный предикат при помощи поиска с возвратом может давать много решений. Детерминированные предикаты менее требовательны к оперативной памяти и выполняются быстрее. Предикат отсечения cut позволяет превращать недетерминированные предикаты в детерминированные.

Для того чтобы указать, что предикат является детерминированным (недетерминированным), следует перед его именем поместить зарезервированное слово determ (nondeterm). По умолчанию предикат считается детерминированным.

В Турбо-Прологе имеется директива компилятора check_determ, которая принудительно включает проверку предикатов на детерминированность.

В Турбо-Прологе есть так называемые стандартные (встроенные) предикаты, которые не нужно описывать в разделе описания предикатов predicates. Все встроенные предикаты являются детерминированными.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: