
- •Методическое пособие
- •Архангельск,
- •«К 2011 году большинство программ будут писать компьютеры…».
- •История и перспективы развития языка Пролог
- •2. Краткая инструкция по работе в среде pie32
- •3. Механизм вывода в системе Пролог. Примеры Термы и объекты
- •Запросы к базе данных
- •Унификация
- •Правила
- •Рекурсивные процедуры
- •Базы знаний
- •Решение логических задач
- •Арифметические выражения
- •Примеры программ
- •Часть II. Указания к выполнению контрольной работы
- •Введение
- •Генеалогическое дерево
- •Перевод генеалогического дерева в базу фактов
- •Составление правил искомых родственных связей в базе знаний
- •Лабораторная работа №3
- •Список литературы
Составление правил искомых родственных связей в базе знаний
Написать правила для установления родственных связей (всем студентам), таких как:
отец, мать, сестра, брат, сын, дочь, муж, жена;
двоюродная сестра (кузина), двоюродный брат (кузен), дядя, тетя, племянник, племянница;
дедушка, бабушка, прадедушка, прабабушка, внук, внучка, правнук, правнучка;
Задание повышенной трудности (для желающих):
кровные (общий предок), сводные брат и сестра, шурин, деверь, золовка, тесть, теща, зять, невестка и т.п. родственные отношения.
Для каждого родственного отношения первоначально необходимо записать правило на естественном языке (в виде продукции). Например:
ЕСЛИ есть такой X который является отцом Z
И Z является отцом ИЛИ матерью Y
ТОГДА X является дедом Y.
Затем переписать это же правило на языке ПРОЛОГ:
дед (X,Y) :- отец (X,Z), ( отец (Z,Y) ; мать (Z,Y) ).
В синтаксисе языка ПРОЛОГ это правило будет выглядеть так:
grandfather (X,Y) :- father (X,Z), ( father (Z,Y) ; mother (Z,Y) ).
или можно, без перевода на английский язык, просто записать латиницей:
ded (X,Y) :- papa (X,Z), ( papa (Z,Y) ; mama (Z,Y) ).
Заметим, что PIE32 работает с кириллическими идентификаторами, но не всегда корректно, поэтому рекомендуется везде, где можно, применять латиницу.
Примеры запросов к базе знаний и ее ответов
В этом разделе необходимо привести примеры диалога с созданной экспертной системой. Показать возможные варианты запросов системы и ее ответов. Например:
Запрос: Дед (Олег, Y)
Ответ 1: Y = Юрий
Ответ 2: Y = Юлий
Ответ 3: Y = Инга
Пример сложного составного запроса:
Сестра(X,Y),Сестра(Y,X).
Листинг разработанной базы знаний
Привести распечатку готовой программы. Шрифт пропорциональный “Courier”
Часть III. Лабораторные работы
Лабораторная работа №1
Выполняется согласно заданию к курсовой работе, но по упрощенному варианту и не требует детального описания выполненной работы. Достаточно графически представить генеалогическое дерево, разобрать три правила, три простых и три составных запроса, привести сокращенные ответы системы и приложить полный текст базы знаний.
Лабораторная работа №2
Написать программу, которая на запрос реки([“Архангельск”, “Питер”, “Москва”],P) выводила P = [“Северная Двина”, “Нева”, “Яуза”].
Как известно, n! = 1*2*3*…*n. Написать программу для поиска n = 1+2+3+…+n. Обязательно использовать рекурсию.
Написать программу для преобразования списка вида [1997, 1970, 1907, 1979, 1909] к виду [1907, 1909, 1970, 1979, 1997].
На заданный список городов вывести список в порядке убывания количества жителей. Необходимо использовать базу фактов вида население(“Москва”,10000). Население взять в тысячах.
Написать программу определения времени пути между двумя городами. При описании сети дорог необходимо задавать только один вариант пути (для упрощения задачи), т.е. используется топология дерева, например с вершиной в Москве. Для описания БФ использовать отношение:
дорога(город, город, расстояние, скорость).
Лабораторная работа №3
Определить (и напечатать) координаты концов интервала на оси Х, покрываемого максимальным количеством отрезков из списка o1(X1_1,Х2_1), o2(X1_2,Х2_2), ... ,oN(X1_N,Х2_N).
Даны два списка целых чисел A1, ..., AN и B1, ..., BN. Cлить эти списки в один, исключить все повторения чисел и упорядочить их по возрастанию.
Для множества точек плоскости p1(X1,Y1), p2(X2,Y2), ..., pN(Xn,Yn) найти диаметр и центр минимальной описанной окружности.
В списке символов S1, S2, ..., SN найти первое и последнее вхождения указанного символа и исключить все символы между ними.
В списке символов S1, S2, ..., SN исключить все последовательности указанного вида, например [a,b,c,d].
В списке символов S1, S2, ..., SN найти длину наибольшей последовательности, построенной повторением одного и того же символа. Вывести эту последовательность.
В списке символов S1, S2, ..., SN каждую указанную последовательность символов заменить нв другую указанную последовательность.
Из списка символов S1, S2, ..., SN исключить все символы между круглыми скобками. Сами скобки тоже должны быть отброшены. Однако, если внутри круглых скобок есть другая пара круглых скобок, то она и содержащиеся в ней символы должны быть сохранены. И так далее рекурсивно. Например, последовательность "ab(c(d(ef(gh)z)fg)r)dd(ik(l))" преобразуется в "ab(d(gh)fg)dd(l)".
В списке символов S1, S2, ..., SN подсчитать количество букв в последнем слове, если разделителем между словами является один или несколько пробелов.
В списке символов S1, S2, ..., SN подсчитать количество слов, если разделителем между словами является один или несколько пробелов.
Вдоль доски расположены лунки и в каждой лунке лежит шар белого или черного цвета. Одним ходом разрешается менять местами два соседних шара. Добиться того, чтобы в лунках сначала лежали белые, а потом черные шары.
В списке символов S1, S2, ..., SN найти число слов, начинающихся с заданной буквы, если разделителем между словами является один или несколько пробелов.
В списке символов S1, S2, ..., SN найти длину самого короткого слова, если разделителем между словами является один или несколько пробелов. Вывести это слово.
В списке символов S1, S2, ..., SN найти все вхождения указанного слова, если разделителем между словами является один или несколько пробелов.
Вдоль доски расположены лунки и в каждой лунке лежит шар белого, синего или красного цвета. Одним ходом разрешается менять местами два соседних шара. Добиться того, чтобы в лунках сначала лежали белые, затем красные, а потом синие шары.
В списке символов найти число слов с одинаковыми первой и поледеней буквами, если разделителем между словами является один или несколько пробелов. Вывести самое длинное такое слово.
В списке символов S1, S2, ..., SN найти среднюю длину слов, если разделителем между словами является один или несколько пробелов. Вывести все слова, имеющие эту длину.
В списке символов S1, S2, ..., SТ найти длину самого длинного слова, если разделителем между словами является один или несколько пробелов. Вывести это слово.
Преобразовать список целых чисел A1, А2, ..., AN следующим образом:
исключить нули,
слева записать все положительные числа,
справа - все отрицательные.
Каждый элемент списка целых чисел A1, A2, ..., AN помножить на квадрат наименьшего элемента и представить этот список в упорядоченном виде.
Из списка целых чисел A1, А2, ..., AN исключить все элементы, совпадающие со значением [(A_max + A_min + A_ср) / 3].
Из списка целых чисел исключить все члены, равные целой части от среднего арифметического. Результирующий список представить в упорядоченном виде.
Список целых чисел A1, A2, ..., AN оставить без изменений, если он упорядочен по возрастанию или убыванию. В противном случае:
каждый четный элемент списка утроить,
каждый элемент, стоящий на нечетном месте и кратный четырем, удалить.
Список отрезков o1(X1_1,X2_1), o2(X1_2,X2_2), ..., oN(X1_N,X2_N) упорядочить и найти отрезки с минимальной и максимальной длиной.
Даны два списка целых чисел A1, ..., AN и B1,...,BN найти
max(A1*BN, A2*BN-1, ..., AN*B1) и
min(max(A1,...,AN), min(B1,...,BN)).
В каждой из девяти клеток квадрата 3х3 разместить одно из чисел 1, 2 или 3 так, чтобы сумма чисел, стоящих в каждом вертикальном ряду, в каждом горизонтальном ряду и на каждой главной диагонали равнялась 6.
В квадрате размером 3х3 расставить числа 1, 2, 3, 4, 5, 6, 7, 8 и 9 так, чтобы суммы чисел, стоящих в каждом вертикальном ряду, в каждом горизонтальном ряду и на каждой главной диагонали были равны.
Площадь комнаты разделена на шесть прямоугольников, пять из них заняты мебелью, шестой - свободен. Переставить мебель так, чтобы шкаф и кресло поменялись местами, при этом никакие два предмета не могут размещаться одновременно на одном прямоугольнике. Пример начальной расстановки:
Стол
Стул
Шкаф
Стул
Кресло
Решить упрощенный вариант головоломки "пятнашки" (поле размером 3х3, номер старшей фишки - 8) для указываемой начальной позиции. ( Лит-ра: Н.Нильсон. Принципы ИИ... )
Для N произвольно заданных костяшек домино необходимо найти все возможные цепочки из этих костяшек длиной N. Если таких цепочек нет, то выдать максимально длинную возможную цепочку.
Для двух произвольно введенных строк символов определить является ли одна из них инвертированной копией другой без учета пробелов.
Для двух произвольно введенных строк символов определить может ли быть одна строка получена из другой перестановкой символов (без учета пробелов).
Для произвольно введенной последовательности целых чисел определить (и напечатать) максимально длинную подпоследовательность чисел, расположенных в возрастающем порядке.
Для произвольно введенной последовательности символов определить содержатся ли в ней все символы указанного слова в той же последовательности, что и в самом слове. Например: последовательность "development" содержит в себе символы слова "dont".
Для двух произвольно введенных последовательностей символов найти слово наибольшей длины, состоящее из символов, имеющихся в каждой последовательности одновременно и встречающихся в них (последовательностях) в том же порядке, что и в слове.
Написать программу, реализующую беспроигрышную стратегию игры "в крестики-нолики" на поле 3х3. Организовать вывод текущей позиции после каждого хода программы и человека.
Для списка пар целых чисел р1(Х1,Y1), p2(X2,Y2), ..., pN(XN,YN), рассматриваемых как координаты точек на плоскости, найти и вывести все прямоугольники и квадраты, все четыре вершины которых располагаются в этих точках. Определить фигуру наибольшей площади.
Написать программу шифрации последовательности А нулей и единиц в последовательность В также нулей и единиц, реализующую следующий алгоритм шифрации:
b(1) = a(1);
b(j) = 1, если a(j) = a(j-1) и b(j) = 0 в противном случае.
Написать также программу дешифрации В в А.