На этом шаге мы рассмотрим задание типов аргументов.
Объявление доменов аргументов в разделе predicates называется заданием типов аргументов. Предположим, имеется следующая связь объектов:
Франк - мужчина, которому 45 лет.
Факт Пролога, соответствующий этому предложению естественного языка, может быть следующим:
person(frank,male,45).
person(symbol,symbol,unsigned).
Здесь для всех трех аргументов использованы стандартные домены. Отныне всякий раз при работе с предикатом person, вы должны передавать ему три аргумента, причем первые два должны быть типа symbol, а третий - типа integer.
Если в программе используются только стандартные домены, то нет необходимости использовать раздел domain; вы уже видели несколько программ такого типа.
Или, предположим, что вы хотите описать предикат, который сообщал бы позицию буквы в алфавите, т. е. цель
alphabet_position(Letter,Position)
alphabet_position(A_character,N).
Если при объявлении предиката используются только стандартные домены, то программе не нужен раздел domains. Предположим, что вы хотите описать предикат так, что цель будет истинна, если Acharacter является N-м символом алфавита. Предложения этого предиката будут такими:
alphabet_position('а',1). alphabet_position('b',2). alphabet_position('c',3). ... alphabet_position('z',26).
Вы можете объявить данный предикат следующим образом:
predicates alphabet_position(char,unsigned)
и тогда вам не будет нужен раздел domains. Если разместить все фрагменты программы pro24_1.pro вместе, получим:
predicates
alphabet_position(char,integer)
clauses
alphabet_position('a',1).
alphabet_position('b',2).
alphabet_position('с',3).
% здесь находятся остальные буквы
alphabet_position('z',26).
Ниже представлено несколько простых целей, которые вы можете использовать:
alphabet_position('a',1). alphabet_position(X,3). alphabet_position('z',What).
На следующем шаге мы рассмотрим арность предиката.