На этом шаге мы рассмотрим раздел предикатов.
Если в разделе clauses программы на Прологе вы описали собственный предикат, то вы обязаны объявить его в разделе predicates (предикатов); в противном случае Пролог не поймет, о чем вы ему "говорите". В результате объявления предиката вы сообщаете, к каким доменам (типам) принадлежат аргументы этого предиката.
Предикаты задают факты и правила. В разделе же predicates все предикаты просто перечисляются с указанием типов (доменов) их аргументов. Эффективность работы Пролога значительно возрастает именно из-за того, что вы объявляете типы объектов (аргументов), с которыми работают ваши факты и правила.
Объявление предиката начинается с имени этого предиката, за которым идет открывающая (левая) круглая скобка, после чего следует ноль или больше доменов (типов) аргументов предиката:
predicateName(argument_type1 OptionalName1, argument_type2 OptionalName2,.., argument_typeN OptionalNameN)
После каждого домена (типа) аргумента следует запятая, а после последнего типа аргумента - закрывающая (правая) скобка. Отметим, что, в отличие от предложений в разделе clauses, декларация предиката не завершается точкой. Доменами (типами) аргументов предиката могут быть либо стандартные домены, либо домены объявленные вами в разделе domains. Можно указывать имена аргументов OptionalNameK - это улучшает читаемость программы, и не сказывается на скорости ее исполнения, т. к. компилятор их игнорирует.
Имя предиката должно начинаться с буквы, за которой может располагаться последовательность букв, цифр и символов подчеркивания. Регистр букв не имеет значения, однако мы не советуем вам использовать заглавные буквы в качестве первой буквы имени предиката. Имя предиката может иметь длину до 250 символов.
В именах предикатов запрещается использовать пробел, символ минус, звездочку и другие алфавитно-цифровые символы. Корректные имена Пролога могут включать символы, перечисленные в таблице 1.
| Название символов | Примеры символов | 
|---|---|
| Заглавные буквы | А, B, ..., Z | 
| Строчные буквы | a, b ..., z | 
| Цифры | 0, 1, ..., 9 | 
| Символ подчеркивания | _ | 
Имена предикатов и аргументов могут состоять из любых комбинаций этих символов при условии, что вы подчиняетесь правилам построения соответствующих имен. В таблице 2 приведены корректные и некорректные имена предикатов.
| Корректные имена предикатов | Некорректные имена предикатов | 
|---|---|
| Fact | [fact] | 
| is_a | *is_a* | 
| has_a | has/a | 
| PatternCheckList | Pattern-Check-List | 
| choose_Menu_Item | Choose Menu Item | 
| PredicateName | Predicate<Name> | 
| first_in_10 | >first_in_10 | 
Аргументы предикатов должны принадлежать доменам, известным Прологу. Эти домены могут быть либо стандартными доменами, либо некоторыми из тех, что вы объявляли в разделе доменов.
1. Если предикат my_predicate(symbol, integer) объявлен в разделе predicates следующим образом:
   predicates
      my_predicate(symbol,integer)
   predicates
      my_predicate(name,number),
   domains
      name=symbol
      number=integer
   predicates
      my_predicate(name,number)
2. Следующий фрагмент программы показывает несколько различных объявлений доменов и предикатов:
   domains
      person,activity=symbol
      car,make,color=symbol
      mileage,years_on_road,cost=integer predicates
      likes(person,activity)
      parent(person,person)
      can_buy(person,car)
      car(make, mileage,years_on_road,color,cost)
      green(symbol)
      ranking(symbol,integer)
Этот фрагмент сообщает следующую информацию об этих предикатах и их аргументах:
На следующем шаге мы рассмотрим раздел доменов.