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

Задание типов аргументов при декларации предикатов

Объявление домена аргументов в секции predicates называется заданием

типа аргумента. Например, предположим у вас имеется следующая связь объ-

ектов:

Франк - мужчина, которому 45 лет.

Факт Пролога, соответствующий этому предложению естественного языка,

может быть следующим:

person(frank, male, 45).

Для того, чтобы объявить person (человек), как предикат с этими тре-

мя аргументами, вы можете разместить в секции predicates следующую стро-

ку:

person(symbol, symbol, integer).

Здесь для всех трех аргументов вы использовали стандартные домены.

Отныне, всякий раз, когда бы вы не использовали предикат person, вы долж-

ны передавать ему три аргумента, причем первые два должны быть типа

symbol, а третий - типа integer.

Если в вашей программе используются только стандартные домены, то

нет необходимости использовать секцию domain (вы уже видели несколько

программ такого типа).

Или, предположим, что вы хотите описать предикат, который сообщал бы

вам позицию буквы в алфавите, т.е. цель

alphabet_position(Letter, Position)

должна вернуть вам Position = 1, если Letter = a, Position = 2, если

Letter = b и т.д. Предложения этого предиката могут выглядеть следующим

образом:

alphabet_position(A_character, N).

Если при объявлении предиката используются только стандартные доме-

ны, то программе не нужна секция domains. Предположим, что вы хотите опи-

сать предикат так, что цель будет истинна, если A_character является n-ым

символом алфавита. Предложения этого предиката будут такими:

alphabet_position('a', 1).

alphabet_position('b', 2).

alphabet_position('c', 3).

...

alphabet_position('z', 26).

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

predicates

alphabet_position(char, integer)

и тогда вам не будет нужна секция domains. Если разместить все фрагменты

программы вместе, получим:

predicates

alphabet_position(char, integer)

clauses

alphabet_position('a', 1).

alphabet_position('b', 2).

/*...здесь должны быть все остальные буквы...*/

alphabet_position('z', 26).

Ниже представлено несколько простых целей, которые вы можете ввести:

alphabet_position('a', 1).

alphabet_position(X, 3).

alphabet_position('z', What).