
- •Декларация и правила Пролога
- •1. Цель работы
- •2. Теория
- •2.1. Основные стандартные домены Пролога
- •2.2. Задание типов аргументов при декларации предикатов
- •2.3. Автоматическое преобразование типов
- •2.4. Синтаксис правил
- •3. Порядок выполнения работы
- •4. Варианты задания
- •5. Контрольные вопросы
- •Литература
- •Содержание
- •Декларация и правила Пролога
2.4. Синтаксис правил
Правила используются в Прологе в случае, когда какой-либо факт зависит от истинности другого факта или группы фактов. Правила – это связанные отношения; они позволяют Прологу логически выводить одну порцию информации из другой. Правило принимает значение "истина", если доказано, что заданный набор условий является истинным.
В Прологе все правила имеют 2 части: заголовок и тело, разделенные специальным знаком :-.
Заголовок – это факт, который был бы истинным, если бы были истинными несколько условий. Это называется выводом или зависимым отношением.
Тело – это ряд условий, которые должны быть истинными, чтобы Пролог мог доказать, что заголовок правила истинен.
В качестве примера напишем следующее правило: "Билл любит цветы, если цветы красные". На языке Пролог это правило запишется так:
любит(билл, цветы):- красные(цветы).
В записанном правиле выражение «любит (билл, цветы)» является заголовком правила, а «красные (цветы)» – телом правила. Символ :- имеет смысл "если", и служит для разделения двух частей правила: заголовка и тела.
Тело правила может состоять из одной или более подцелей. Подцели разделяются запятыми, определяя конъюнкцию, а за последней подцелью правила следует точка:
Заголовок :- <Подцель>,<Подцель>,…,<Подцель>.
Каждая подцель выполняет вызов другого предиката Пролога, который может быть истинным или ложным. При этом Пролог проверяет истинность вызванного предиката, и если это так, то работа продолжается, но уже со следующей подцелью. Если хоть одна из подцелей ложна, то все правило ложно.
Разделительный знак заголовка и тела правила :- читается как "если" (if). Однако if Пролога отличается от if, написанного в других языках, например в Pascal, где условие, содержащееся в операторе if, должно быть указано перед телом оператора, который может быть выполнен. Другими словами: если ЗАГОЛОВОК истинен, тогда ТЕЛО истинно. Данный тип оператора известен как условный оператор если/тогда (if/then).
Пролог же использует другую форму логики в таких правилах. Вывод об истинности заголовка правила Пролога делается, если (после того, как) тело правила истинно: ЗАГОЛОВОК истинен, если ТЕЛО – истинно (или: если ТЕЛО может быть выполнено).
Таким образом, правило Пролога соответствует условной форме тогда/если (then/if).
Вы можете рассматривать правило и как процедуру. С такой "процедурной" точки зрения правила могут "попросить" Пролог выполнить другие действия, отличные от доказательства фактов, такие как напечатать что-нибудь или создать файл.
Как вы уже, наверное, заметили, факты и правила – практически одно и то же, кроме того, что факты не имеют явного тела. Факты ведут себя так, как если бы они имели тело, которое всегда истинно.
3. Порядок выполнения работы
Рассматриваемые в лабораторной работе электрические схемы являются абстрактными схемами, содержащими некоторое количество различных элементов соединенных между собой. Задача лабораторной работы сводится к установлению характеристик и взаимосвязей конкретных элементов по их основным свойствам.
При этом допускается, что с точки зрения теории электротехники, рассматриваемые в лабораторной работе электрические схемы, могут содержать ошибки.
В номере варианта первая цифра означает номер строки с числовыми данными из таблицы 1, оставшиеся цифры – номер схемы.
1. Составить набор фактов полностью описывающих заданную электрическую схему.
Электрическая схема содержит различные элементы, каждый из которых характеризуется наименованием, обозначением, узлами подключения, номиналом и единицами измерения. Все эти характеристики элементов должны быть отражены в описании. Например: резистор, c обозначением r1, с узлами подключения 10 и 6, и номиналом 300 кОм может быть описан предикатом:
элемент (резистор, r1, 10, 6, 300, кОм).
При описании электрической схемы узлы, между которыми нет ни одного элемента, должны иметь одинаковые номера (должны быть объединены). Например, на схеме приведенной, на рисунке 1 узлы 6 и 7, а также 1 и 2 могут быть объединены, и тогда их описание может выглядеть так:
элемент (резистор, r1, 1, 7,..).
элемент (резистор, r2, 7, 1,..).
Рис. 1. Электрическая схема
2. Написать правило поиска общих узлов.
Общим узлом считаем узел, соединяющий любые два элемента. Например на рисунке 2 показан узел 27, являющийся общим для R1 и R2, а также для R1 и R3, и для R2 и R3.
Р
ис.
2. Общий узел
При написании правила предусмотреть, что каждый элемент схемы может быть описан одним из двух способов. Так, например элемент r5 на рисунке 1 может быть описан двумя способами:
элемент (резистор, r5, 8, 7,..).
или
элемент (резистор, r5, 7, 8,..).
3. Написать правило поиска элементов соединенных параллельно.
Д
ва
элемента считаем параллельными, если
они имеют два общих узла. Например, на
рисунке 3 элементы R1
и R3
являются параллельными.
Рис. 3. Параллельное соединение
Так же на рисунке 1 элементы r1 и r2 являются параллельными и имеют общие узлы 1 и 7.
4
. Написать
привило (или несколько) для поиска
элементов соединенных последовательно.
Два элемента соединены последовательно,
если они имеют один общий узел, причем
этот узел является общим только для
этих двух элементов. На рисунке 4 элементы
R1 и R2
соединены последовательно.
Рис. 4 Последовательное соединение
А на рисунке 1 элементы r3 и И3 соединены последовательно, а элементы r5 и И1 нет.
При написании привила поиска последовательных элементов может возникнуть необходимость использовать логическую приставку НЕ, изменяющую значение выражения на противоположное. В Прологе для этого существует специальный предикат not. Синтаксис предиката not следующий:
not (имя_предиката(аргументы_предиката)).
где «имя_предиката» – это имя предиката имеющегося в программе или логическое выражение; «аргументы_предиката» – это аргументы используемого предиката. В качестве аргумента можно использовать: конкретное значение или связанную переменную (имеющую значение). Если в качестве аргумента будет использоваться свободная или анонимная переменная программа выдаст сообщение об ошибке.
Использование в программе предиката not можно показать на следующем примере: если в программе существует правило определяющее, что Билл любит цветы если они красные (правило показано выше), то следующая строка в разделе целей:
not (любит(билл, цветы).
будет означать, что Билл не любит цветы, если они красные.
5. Составить следующие запросы:
вывести на экран все элементы подключенные в заданный узел;
вывести на экран обозначения резисторов, если их сопротивление >20 Ом;
вывести все элементы имеющие общий узел с заданным элементов;
вывести элементы, для которых заданный узел является общим;
вывести все варианты параллельных соединений;
существуют ли элементы параллельные заданному элементу;
вывести все варианты последовательных соединений;
существуют ли элементы соединенные последовательно заданному элементу.
6. Написать и сдать отчет по выполненной работе.
Отчет должен содержать описываемую схему, листинг программы с комментариями, результаты, выдаваемые программой на каждый из запросов.