- •Правила выполнения и оформления контрольной работы
- •Представление знаний
- •Задание 1
- •1. Логическая модель представления знаний
- •Декларативная и процедурная семантика языка Пролог
- •Типы данных Пролог
- •1.3. Раздел предложений
- •Организация запросов на языке Пролог
- •Варианты задания 2
- •Разветвления на языке Пролог
- •Правила логического вывода
- •Правило логического вывода на языке Пролог
- •Варианты задания 3
- •Варианты задания 4
- •2. Представление знаний правилами продукций
- •Примеры выполнения заданий
- •Задание 5
- •Задание 6
- •3. Семантические сети
- •Задание 7
- •4. Фреймы
- •Задание 8
- •Содержание
Декларативная и процедурная семантика языка Пролог
Как уже упоминалось, язык Пролог поддерживает декларативный, описательный стиль программы. Декларативный смысл программы состоит в том, что она определяет, является ли данная цель истинной, достижимой [5]. Если является, то программа выясняет, при каких значениях переменных эта цель достигается. Процедурный же смысл программы состоит в определении порядка действий, с помощью которых данная цель достигается.
Таким образом, декларативный смысл касается только отношений объектов, определенных в программе, он определяет, что должно быть результатом. Процедурный смысл диктует, как именно следует получить результат.
Эта особенность языка Пролог значительно облегчает программирование сложных логических задач.
Типы данных Пролог
Предложим классификацию данных PROLOG, изображенную на рис. 1.
Переменные — это данные PROLOG, имеющие имя, представляющее собой набор букв и цифр, начинающийся с заглавной (прописной) буквы. Переменная может быть конкретизирована каким-либо значением или не конкретизирована.
Следует отметить, что конкретизация не является полным аналогом оператора присваивания.
Переменная получает свое значение только в результате сопоставления с константами в фактах и правилах программы. Получив значение, переменная обладает им лишь до получения ответа на запрос. После этого переменная вновь становится свободной и участвует в поиске альтернативных решений. Поэтому следует помнить:
— перемененная не является хранилищем информации на все время работы программы, а служит частью процесса сопоставления (унификации), о котором речь пойдет далее;
— областью действия переменной является не вся программа, а лишь одно предложение, т. е. одно правило или один вопрос.
Во многих случаях переменная встречается в правиле только один раз, и ее значение не влияет на результат логического вывода. Такую переменную называют анонимной и замещают знаком подчеркивания.
Рис. 1. Классификация данных Пролог
Атомом называют любой набор символов алфавита, заключенный в кавычки, или набор строчных букв и цифр, начинающийся с буквы, например:
"alpha", "Alpha", "4beta", anna, x5.
He являются атомами наборы: 1b, #d, a-b.
Атомом также является любой символ алфавита. Например: (, ;, <, >.
Числовые константы определяются в PROLOG так же, как и в других языках.
Принято также использовать рекурсивное определение списка:
пустой список [ ] — это список;
[А | В] — список, если В — список.
И, наконец, структурой называют единый объект Пролога, состоящий из совокупности других объектов, например, Отец(X,Иван).
1.3. Раздел предложений
Фактом называют предложение Пролога следующего вида:
<имя факта>(<список констант или переменных через запятую>).
Факт считается всегда истинным. Например:
Хобби(Анна,марки).
Хобби(Петя,фантики).
Данное([1,2,3,4]).
Предикатом называют предложение Пролога вида
<имя предиката>(<список имен переменных и констант
через запятую>).
Предикат может принимать значение «истина» или «ложь» в зависимости от значений переменных.
Правилом называют следующее предложение Пролога:
<предикат> if <предикат1>, <предикат2>, ..., <предикатN>.
Раздел предложений имеет вид
Clauses <факты>. <правила>.
Например:
Clauses
отец(иван,петр). /*Иван — отец Петра*/
отец(иван,игорь). /*Иван - отец Игоря*/
отец(игорь,семен).
отец(игорь,анна). дед(Х,У) if отец(Z,Y), отец(Х,Z).
/*Х — дед Y,если отцом Y является Z, а отцом Z является X*/