Учебное пособие: Язык логического программирования Visual Prolog

· раздел domains (доменов);

· раздел goal (целей).

Раздел clauses — это сердце VisualProlog-программы; именно в этот раздел записываются факты и правила, которыми будет оперировать VisualProlog, пытаясь разрешить цель программы.

Раздел predicates — это тот, в котором объявляются предикаты и домены (типы) их аргументов (вам не нужно объявлять предикаты, встроенные в VisualProlog).

Раздел domains служит для объявления доменов, не являющихся стандартными доменами VisualProlog.

В разделgoalпомещается цель VisualProlog-программы.

9. Раздел предложений

В раздел clauses (предложений) помещаются все факты и правила, составляющие программу. Все предложения для каждого конкретного предиката в разделе clauses должны располагаться вместе . Последовательность предложений, описывающих один предикат , называется процедурой .

Пытаясь разрешить цель, VisualProlog (начиная с первого предложения раздела clauses) будет просматривать каждый факт и каждое правило, стремясь найти сопоставление. По мере продвижения вниз по разделу clauses, он устанавливает внутренний указатель на первое предложение, являющееся частью пути, ведущего к решению. Если следующее предложение не является частью этого логического пути, то VisualProlog возвращается к установленному указателю и ищет очередное подходящее сопоставление, перемещая указатель на него (этот процесс называется поиск с возвратом ).

10. Раздел предикатов

Если в разделе clauses программы на VisualProlog описан собственный предикат, то его необходимо объявить в разделе predicates (предикатов). В результате объявления предиката сообщается, к каким доменам (типам) принадлежат аргументы этого предиката.

11. ОБЪЯВЛЕНИЕ ПОЛЬЗОВАТЕЛЬСКОГО ПРЕДИКАТА

Объявление предиката начинается с имени этого предиката, за которым идет открывающая (левая) круглая скобка, после чего следует ноль или больше доменов (типов) аргументов предиката:

predicateName (argument_typel OptionalNamel,

argument_type2 OptionalName2, …,

argument_typeN OptionalNameN)

После каждого домена (типа) аргумента следует запятая, а после последнего типа аргумента — закрывающая (правая) скобка. В отличии от предложений в разделе clauses, декларация предиката не завершается точкой . Доменами (типами) аргументов предиката могут быть либо стандартные домены, либо домены, объявленные вами в разделе domains. Можно указывать имена аргументов OptionalNameK — это улучшает читаемость программы, и не сказывается на скорости ее исполнения, т. к. компилятор их игнорирует.

Имена предикатов

Имя предиката должно начинаться с буквы, за которой может располагаться последовательность букв, цифр и символов подчеркивания. Буквы должны быть в нижнем регистре! Имя предиката может иметь длину до 250 символов.

В именах предикатов запрещается использовать пробел, символ минус, звездочку и другие алфавитно-цифровые символы.

Аргументы предикатов

Аргументы предикатов должны принадлежать доменам, известным VisualProlog. Эти домены могут быть либо стандартными, либо пользовательскими.

12. Раздел доменов

Домены позволяют задавать разные имена различным видам данных, которые, в противном случае, будут выглядеть абсолютно одинаково. В программах VisualProlog объекты в отношениях (аргументы предикатов) принадлежат доменам, причем это могут быть как стандартные, так и описанные пользователем специальные домены. Раздел domains служит двум полезным целям. Во-первых, можно задать доменам осмысленные имена, даже если внутренне эти домены аналогичны уже имеющимся стандартным. Во-вторых, объявление специальных доменов используется для описания структур данных, отсутствующих в стандартных доменах.

Иногда очень полезно описать новый домен — особенно, когда вы хотите прояснить отдельные части раздела predicates. Объявление собственных доменов, благодаря присваиванию осмысленных имен типам аргументов, помогает документировать описываемые вами предикаты. Рассмотрим пример, показывающий, как объявление доменов помогает документировать предикаты:

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

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

person(symbol, symbol, integer).

В большинстве случаев такое объявление будет работать хорошо, но не наглядно для чтения программы. Более правильным было бы следующее описание:

domains

name, sex = symbol

age = integer

predicates

person(name, sex, age)

Одним из главных преимуществ объявления собственных доменов является то, что VisualProlog может отслеживать ошибки типов, например, такие:

К-во Просмотров: 389
Бесплатно скачать Учебное пособие: Язык логического программирования Visual Prolog