Министерство образования Российской Федерации Нижегородский государственный технический университет Кафедра “Компьютерные технологии в проектировании и производстве ” ПРЕДСТАВЛЕНИЕ ЗНАНИЙ В ИНФОРМАЦИОННЫХ СИСТЕМАХ Методические указания к лабораторным работам Часть 2 Нижний Новгород 2005 Составитель: М.Б.Волков УДК 681 Представление знаний в информационных системах: Методические указания к лабораторным работам. Часть2/НГТУ, кафедра КТПП; Сост. М.Б.Волков. Н.Новгород, 2005. 9 с. Даны рекомендации к выполнению лабораторных работ и самостоятельной работе по дисциплине ”Представление знаний в информационных системах” для студентов специальностей 071900 “Информационные системы”. Науч. редактор С. Л.Моругин Подп. 28.01.05 Формат 210148. Печ. л. 0,4 Нижегородский государственный технический университет Кафедра “Компьютерные технологии в проектировании и производстве “. Адрес предприятия: 603600, Н. Новгород, ул. Минина 24. ЛАБОРАТОРНАЯ РАБОТА №2 1. Цель работы Ознакомиться со средствами управления перебором в логическом программировании и с обработкой списков. Получить навыки разработки программ на языке Visual Prolog по изучаемым темам. 2. Краткие сведения из теории Список - это структура данных, которая либо пуста, либо состоит из двух частей: головы и хвоста. Хвост, в свою очередь, сам является списком. Список рассматривается в Прологе как специальный частный случай двоичного дерева. Для повышения наглядности программ в Прологе предусматриваются специальные средства для списковой нотации, позволяющие представлять списки в виде: [Элемент1,Элемент2,..] или [Голова|Хвост] или [Элемент1,Элемент2,…|Остальные] Список - это составной терм, построенный из последовательности (возможно, пустой) аргументов, заключенной в квадратные скобки. В случае если последовательность аргументов списка не является пустой, в его состав может быть включен дополнительный компонент - переменная, обозначающая остаток (хвост) списка: список = "[" [ выражения [ "|" хвост ] ] "]" хвост = переменная | вызов_функции Значением пустого списка [] является специальная константа. Над списками производят операции: проверка принадлежности к списку, конкатенация, добавление элемента, удаление элемента, удаление подсписка. Операторная запись позволяет программисту приспособить синтаксис программ к своим конкретным нуждам. С помощью операторов можно значительно повысить наглядность программ. Новые операторы определяются с помощью директивы ор, в которой указываются: имя оператора, тип оператора, его приоритет. Как правило, с оператором не связывается никакой операции; оператор - это просто синтаксическое удобство, обеспечивающее альтернативный способ записи термов. 3. Задания к работе и порядок ее выполнения Создать (если отсутствует) свою директорию C/student/группа/фамилия. Запуск Visual Prolog 5.0 производится из главного меню Пуск - Программы –Visual Prolog Personal Edicion – Vip 32. 3.1 Дана двухступенчатая функция, изображенная на рис. 5.1 [1, С. 165]. Связь между Х и Y можно определить с помощью следующих трех правил: Правило 1: если Х < 3, то Y = 0. Правило 2: если 3 <= X и Х < 6, то Y=2. Правило 3: если 6 <= X, то Y = 4. - Составить программу на Visual Prolog без применения отсечений, используя бинарное отношение f(X,Y). Проанализировать процедуру достижение цели: f(1,Y). 3.2 Составить программу (Задание 3.1), применив зеленые отсечения в первом и втором правиле. 3.3 Составить программу (Задание 3.1), использовав красные отсечения. Проанализировать декларативный смысл программы (Задания 3.2 и 3.3). Средство анализа – запуск программы без отсечений. Сделать выводы. 3.4 Составить программу (без применения отсечений) для определения наименьшего из двух чисел (X и Y), использовав отношение: минимум(X,Y,Z). 3.5 Составить программы (Задание 3.4), применив зеленые отсечения, красные отсечения. 3.6 Для программ (Задания 3.4, 3.5) проверьте выполнение цели: минимум(2,5,5). Сделайте выводы. 3.7 Какие ответы даст программа, содержащая следующие факты и правила? р( 1). р( 2) :- !. р( 3). Список целей: р( X). р( X), p(Y). р( X), !, p(Y). Сделать выводы о разнице функций отсечения в пространстве фактов и правил и в пространстве целей. 3.8 Используя отношение конкатенация, напишите цель, соответствующую вычеркиванию трех последних элементов списка L. Результат - новый список L1. Указание: L - конкатенация L1 и трехэлементного списка. 3.9 Напишите последовательность целей для порождения списка L2, получающегося из списка L вычеркиванием его трех первых и трех последних элементов. Определите отношение последний( Элемент, Список) так, чтобы Элемент являлся последним элементом списка Список. Напишите два варианта определения: с использованием отношения конк, без использования этого отношения. 3.10 Определите два предиката четнаядлина( Список) и нечетнаядлина( Список) таким образом, чтобы они были истинными, если их аргументом является список четной или нечетной длины соответственно. Например, список [а, b, с, d] имеет четную длину, a [a, b, c] - нечетную. 3.11 Определите отношение обращение( Список, ОбращенныйСписок), которое обращает списки. Например, обращение( [a,b,c,d],[d,c,b,a] ). 3.12 Определите предикат палиндром( Список). Список называется палиндромом, если он читаемся одинаково, как слева направо, так и справа налево. Например, [м, а, д, а, м]. 3.13 Определите отношение сдвиг( Список1, Список2) таким образом, чтобы Список2 представлял собой Список1, «циклически сдвинутый» влево на один символ. Например, GOAL сдвиг([1,2,3,4,5],L1), сдвиг1(LI,L2) дает L1=[2,3,4,5,1] L2=[3,4,5,1,2] 3.14 Определите отношение подмножество( Множество, Подмножество) где Множество и Подмножество - два списка представляющие два множества. Желательно иметь возможность использовать это отношение не только для проверки включения одного множества в другое, но и для порождения всех возможных подмножеств заданного множества. Например: GOAL подмножество([а,b,с],S ). S=[a,b,c]; S=[b,c]; S=[c]; S=[]; S=[a,c]; S=[a]; 3.15 Определите отношение разбиениесписка( Список, Список1, Список2) так, чтобы оно распределяло элементы списка между двумя списками Список1 и Список2 и чтобы эти списки были примерно одинаковой длины. Например: разбиениесписка( [а, b, с, d, e],[a, с, е],[b, d]). 4. Содержание отчета 4.1. Цель работы. 4.2. Задания. 4.3. Программы. Результаты моделирования. 5. Вопросы для самоконтроля 5.1. Введите понятия: отсечение, зеленое отсечение, красное отсечение, отрицание, неуспех как специальная цель, успех как специальная цель. 5.2. Свойства зеленых отсечений. 5.3. Свойства красных отсечений 5.4. Как и при каких условиях влияет на декларативный смысл программы введение отсечения: в правиле, в запросе. 5.5. Как и при каких условиях влияет на процедурный смысл программы введение отсечения: в правиле, в запросе. 5.6. Последовательность выполнения условий в правиле (подцелей в запросе), содержащих логические И, ИЛИ, отсечения. 5.7. Как и при каких условиях влияет введение отрицания на декларативный смысл программы? 5.8. Как и при каких условиях влияет введение отрицания на процедурный смысл программы? 5.9. Введите понятия симметрии, рефлексивности и транзитивности в типах отношений для структур Пролога. Приведите примеры записи предикатов, обладающих указанными свойствами. 5.10. Введите понятия: список, голова списка, хвост списка, пустой список, непуской список. 5.11. Какие объекты Пролога могут быть объединены в список? 5.12. Синтаксис записи списков на Прологе. 5.13. Как реализуются на Прологе: проверка принадлежности элемента списку, конкатенация, добавление элемента, удаление элемента, удаление подсписка. 5.14. Введите понятия: операторы, операторная нотация, инфиксные, префиксные и постфиксные операторы, приоритет операторов, арифметические встроенные процедуры 5.15. Как вводится пользовательский оператор? Приведите пример. 5.16. Привести пример записи инфиксного, префиксного и постфиксного операторов. 5.17. Как определяется приоритет выполнения операторов? 6. Рекомендуемая литература 6.1 Братко И. Программирование на языке Пролог для искусственного интеллекта: Пер. с англ. - М.: Мир, 1990.-560 с., (С.94120, 164-185). 6.2 Пролог – язык программирования будущего/ Дж. Доорс, А.Р. Рейнблейн, С. Вадера: Предисловие А.Н.Волкова. - М.: Финансы и статистика, 1990. – 144 с., (С.43-52, 57-64, 77-84, 110-118). 6.3 Малпас Дж. Реляционный язык Пролог и его применение: Пер. с англ./Под редакцией В.Н. Соболева. – М.: Наука. Гл. ред. физ.мат. лит., 1990. –464с., (С.95-101, 110-119, 129-153). 6.4 Янсон А. Турбо-Пролог в сжатом изложении: Пер. с нем.М.: Мир, 1991. – 94 с. 6.5 Стерлинг Л., Шапиро Э. Искусство программирования на языке Пролог: Пер. с англ. – М.: Мир, 1990. – 235 с., (С. 43-50, 127140).