Замечание: не допускается рекурсивное определение символических констант, т.е. не допустимо, например, следующее выражение: sto = 2 * sto / 2
Раздел domains предназначен для объявления доменов, описывающих типы областей значений используемых в программе объектов (термов). Например, если мы хотим определить предикат person(familia, pol, vozrast) характеризующий людей (person) с точки зрения фамилии (familia), пола (pol) и возраста (vozrast), и позволяющий описывать конкретные факты о людях в разделе clauses программы, то необходимо в разделе domains программы объявить соответствующие этим термам типы доменов:
domains
familia, pol = symbol vozrast = integer
Раздел predicates предназначен для объявления предикатов пользователя с указанием имени предиката и его доменов. Домены указываются в скобках и разделяются запятыми. Домены задаются либо явно, либо неявно. Декларация предиката не заканчивается точкой, в отличие от утверждений в разделе clauses.Предикат может состоять и из одного имени. Обычно такие предикаты используются для обозначения цели или заголовка правила. Например, предикат start часто используют в качестве имени программы, а предикат menu может служить заголовком правила, определяющего возможности меню программы.
Раздел clauses служит для размещения фактов и правил, которые используются для оперирования этими фактами. Порядок расположения утверждений в разделе clauses не имеет значения, однако важным требованием Турбо-Пролога является расположение утверждений с одноименным предикатом последовательно друг за другом в одном месте программы (т.е. без “разрывов”).
Рассмотрим, например, следующий фрагмент программы:
domains
familia, pol = symbol vozrast = integer predicates
person(familia, pol, vozrast) clauses person("Петров","муж",35). person("Волков","муж",21). person("Полякова","жен",28).
В разделе clauses приведенного фрагмента программы имеется три утверждения-факта с предикатом person. В этих утверждениях на месте аргументов данного предиката, выступающих в роли доменов, появляются конкретные значения, принадлежащие домену familia (symbol); “муж”, ”жен”, принадлежащие домену pol (symbol); 35, 21, 28, принадлежащие домену vosrast (integer).
Типы доменов аргументов предиката допускается задавать и непосредственно в предикате, помещая соответствующие ключевые слова типов доменов на месте самих аргументов. В этом случае, например, тот же фрагмент программы будет выглядеть следующим образом:
predicates
person(symbol, symbol, integer) clauses person("Петров","муж",35). person("Волков","муж",21). person("Поляков","жен",28).
Программа стала короче (раздел domains исчез), раздел clauses не изменился, однако восприятие и понимание программы (особенно в случае большого количества различных предикатов) становится более сложным. Поэтому предпочтительным является описание типов доменов с использованием раздела domains.
Форматы объявления доменов предикатов следующие:
а. Для одного домена:
<имя домена>=<ключевое слово типа домена>
б. Для группы однотипных доменов:
Раздел database служит для описания предикатов динамической базы данных (ДБД). ДБД состоит из фактов, которые предполагается модифицировать (удалять, добавлять, изменять) во время работы программы. Если такая база не используется, то раздел database в программе отсутствует.
Раздел goal служит для объявления внутренней цели программы. Программа с внутренней целью не использует стандартное диалоговое окно для взаимодействия с пользователем. При отсутствии в программе раздела goal цель является внешней, т.е. определяется вопросами, вводимыми пользователем с помощью стандартного диалогового окна.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.