ЛР_2_ПЗ - WordPress.com

advertisement
Министерство образования Российской Федерации
Нижегородский государственный технический
университет
Кафедра “Компьютерные технологии в проектировании и
производстве ”
ПРЕДСТАВЛЕНИЕ ЗНАНИЙ
В ИНФОРМАЦИОННЫХ СИСТЕМАХ
Методические указания к лабораторным работам
Часть 2
Нижний Новгород
2005
Составитель: М.Б.Волков
УДК 681
Представление знаний в информационных системах:
Методические указания к лабораторным работам. Часть2/НГТУ,
кафедра КТПП; Сост. М.Б.Волков. Н.Новгород, 2005.  9 с.
Даны рекомендации к выполнению лабораторных работ и
самостоятельной работе по дисциплине ”Представление знаний в
информационных системах” для студентов специальностей 071900 
“Информационные системы”.
Науч. редактор С. Л.Моругин
Подп. 28.01.05 Формат 210148. Печ. л. 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).
Download