Шаг 24.
Основы логического программирования.
Задание типов аргументов при декларации предикатов

    На этом шаге мы рассмотрим задание типов аргументов.

    Объявление доменов аргументов в разделе predicates называется заданием типов аргументов. Предположим, имеется следующая связь объектов:

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

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

   person(frank,male,45).
    Для того чтобы объявить person (человек), как предикат с этими тремя аргументами, вы можете разместить в разделе predicates следующую строку:
   person(symbol,symbol,unsigned).

    Здесь для всех трех аргументов использованы стандартные домены. Отныне всякий раз при работе с предикатом person, вы должны передавать ему три аргумента, причем первые два должны быть типа symbol, а третий - типа integer.

    Если в программе используются только стандартные домены, то нет необходимости использовать раздел domain; вы уже видели несколько программ такого типа.

    Или, предположим, что вы хотите описать предикат, который сообщал бы позицию буквы в алфавите, т. е. цель

   alphabet_position(Letter,Position)
Должна вернуть вам Position = 1, если Letter = a, Position = 2, если Letter = b и т. д. Предложения этого предиката могут выглядеть следующим образом:
   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).

    На следующем шаге мы рассмотрим арность предиката.




Предыдущий шаг Содержание Следующий шаг