Логическое программирование: учебно-методическое пособие / М. Г. Козлова. ФГАОУ ВО «Крымский федеральный университет имени В. И. Вернадского». ― Симферополь, 2016. ― 54 с.
Пособие содержит учебно-методический материал и задания по практической части курса «Логическое программирование».
Предназначено для студентов 3-го курса направления подготовки 01.03.02 — Прикладная математика и информатика.
Лабораторная работа №1. Основы программирования на Прологе 4
Лабораторная работа №2. Использование рекурсии в Прологе. 16
Лабораторная работа №3. Представление и обработка списков.……26
Лабораторная работа №4. Сортировка списков ………………….……35
Лабораторная работа №5. Множества. ………………….……46
Лабораторная работа №6. ………………….……11
Лабораторная работа №7. ………………….……11
Лабораторная работа №8. ………………….……11
Лабораторная работа №9. ………………….……11
Лабораторная работа №10. ………………….……11
ЛАБОРАТОРНАЯ РАБОТА №1
ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ПРОЛОГЕ
Введение в программирование на языке Prolog. Решение варианта задачи.
Цель работы
Изучение структуры программ. Разработка Пролог-программ с использованием фактов и правил. Организация запросов к программе.
Краткие сведения
Основные понятия
Пролог — язык логического программирования, основанный на логике предикатов первого порядка. Пролог-программы содержат описание логических взаимосвязей, необходимых для решения задачи. С точки зрения логики предикатов элементарные выражения имеют вид
где — имя предиката, — аргументы.
Например, предложение «Степан является дядей Ольги» на Прологе запишется в виде: Uncle(stepan,olga), где Uncle — предикат, описывающий отношение «является дядей»; stepan, olga — объекты «Степан» и «Ольга», связанные отношением Uncle.
Предложения в Прологе бывают трех типов: факты, правила и запросы.
Факт используется для констатации того, что выполнено некоторое отношение между объектами. Например,
Эти факты констатируют, что «igor — мужчина», «anna — женщина», «igor является родителем anna».
Правила — это утверждения, истинность которых зависит от некоторых условий. Например:
grandmother(X,Y):- parent(X,Z), parent(Z,Y), woman(X).
Первое правило устанавливает, что «X является ребенком Y», если истинно выражение «Y является родителем X». Второе правило говорит, что «X является бабушкой Y», если выполняется, что существует такой Z, что «X является родителем Z» и «Z является родителем Y», и «X является женщиной».
Правила позволяют определять новые предикаты через уже имеющиеся. В данном случае предикат child (ребенок) определяется через предикат parent (родитель), и предикат grandmother (бабушка) через предикаты parent и woman (женщина).
Конечное множество правил и фактов образует логическую программу. В синтаксисе Пролога каждое правило и каждый факт заканчиваются точкой (признак конца предложения).
Множество всех утверждений, входящих в состав одного предиката, называется процедурой. Предикат реализуется в Пролог-программе с помощью процедуры. Например,
Три примера решения задачек на Прологе
В Прологе предложения каждой процедуры должны быть сгруппированы в одном месте.
Аргументы предиката могут быть конкретными или абстрактными. Конкретный аргумент задается именем (простейший случай). В Прологе принято, что имя аргумента — это идентификатор, начинающийся с маленькой буквы. Абстрактный аргумент — это переменная. Переменная обозначается идентификатором, начинающимся с заглавной буквы.
Область действия переменной, входящей в предложение, ограничивается этим предложением. В связи с этим две переменные с одинаковыми именами из разных предложений — это две различные переменные.
В Прологе выделяется анонимная переменная — знак подчеркивания «_», — которая предписывает проигнорировать значение аргумента. Например, в предложении
mother(X):- parent(X,_), woman(X).
определяется предикат mother (мама), условная часть которого содержит предикат «X является родителем Y». В связи с тем, что для предиката mother не важно, родителем кого именно является X, то второй аргумент в предикате parent — анонимная переменная.
Запрос (цель) инициализирует процедуру поиска в программе (факты + правила). Пролог просматривает факты и правила в поисках предиката, сопоставимого с запросом.
Запрос может быть простым (подцель). Это предикат, относительно которого нужно выяснить, выполняется он или нет. Аргументами такого предиката могут быть как конкретные объекты, так и переменные. Запрос может состоять из одной или нескольких подцелей. Чтобы ответить на запрос, Пролог пытается проверить, выполняются ли соответствующие предикаты.
Последовательность подцелей — это одновременное выполнение всех подцелей. Если запрос содержит переменные, то Пролог-система должна найти конкретные объекты, которые, будучи подставлены вместо переменных, обеспечивают достижение цели. Если ни для одной такой подстановки Пролог-система не может вывести цель из предложений программы, то ответом на запрос будет no (нет).
Рекурсия — алгоритмический метод, используемый в Прологе и означающий обращение процедуры к самой себе. Классическим примером рекурсивного определения на Прологе служит определение предиката ancestor (предок), состоящего из двух предложений:
ancestor(X,Y):- parent(Z,Y), ancestor(X,Z).
Первое правило определяет «непосредственного предка» — родителя, а второе — «отдаленного предка» (предка родителя).
Типы доменов Пролога
Домен определяет множество допустимых значений, которые может принимать объект, принадлежащий этому домену. В табл. 1.1 приведены шесть встроенных типов доменов Пролога.
Тип данных | Ключевое слово | Пример |
Символы | char | ‘б’, ‘? ‘, ‘z’ |
Целые числа | integer | 32, -120 |
Действительные числа | real | 0.12, -3.14 |
Строки | string | «baby», «157» |
Символьные имена | symbol | p, q, r, anna, «Ivan» |
Файлы | file | proba.txt |
В Прологе можно вводить собственные имена типов доменов для придания смысла аргументу предиката. Типы доменов используются для описания предикатов в разделе predicates. Например:
title, producer = symbol
film (title, producer, year)
film (symbol, symbol, integer)
Пролог-программа может состоять из пяти разделов:
1) domains — описание доменов, которые описывают классы объектов, используемых в программе;
2) database — определение баз данных, которые являются предикатами динамической базы данных;
3) predicates — описание предикатов, используемых в программе;
4) clauses — описание фактов и правил;
5) goal — описание запроса (цели) создаваемой программы.
Арифметические операторы
Арифметические операции: + (сложение), — (вычитание), / (деление), * (умножение), div (частное от деления нацело), mod (остаток от деления нацело). Операндами операций div и mod могут быть только целые значения.
sin(X) | – возвращает синус своего аргумента; |
cos(X) | – возвращает косинус своего аргумента; |
tan(X) | – возвращает тангенс своего аргумента; |
arctan(X) | – возвращает арктангенс вещественного значения, с которым связан X; |
ln(X) | – натуральный логарифм X; |
log(X) | – десятичный логарифм X; |
exp(X) | – е в степени X; |
sqrt(X) | – корень квадратный из X; |
abs(X) | – если значение X — положительная величина value, то abs(X) возвращает это значение; в противном случае (–1)*value; |
round(X) | – округляет значение X (результат вещественный); |
trunk(X) | – усекает (отбрасывает дробную часть) Х. |
Цель программы
Цель — формулировка задачи, которую программа должна решить. Пролог использует внутренние и внешние цели. Внутренние содержатся в программе в разделе goal, внешние вводятся с клавиатуры после запуска программы. Если цель внутренняя, то при выполнении программы Пролог-система ищет первое решение и заканчивает работу, если же цель внешняя, то Пролог-система ищет все решения.
Программа работает на доказательство цели. Подцели цели доказываются слева направо последовательно, подцель за подцелью.
Примеры программ с использованием фактов и правил
Пример 1.1. Рассмотрим программу, в которой используется предикат likes(X,Y), описывающий отношение «X предпочитает Y».
predicates
likes(symbol, symbol). % Описание предиката
clauses
% Определение предиката, используя факты
likes(igor,»Italy»).
likes(anna,»Germany»).
likes(igor,»Germany»).
likes(dima,»France»).
likes(german,»Spain»).
% Определение предиката, используя правила
likes(elena,R):- likes(dima,R).
likes(nina,R):- likes(igor,R), likes(anna,R).
Факты задают предпочтения объектов igor, anna, dima, german. Первое правило указывает, что «elena предпочитает то же, что и dima» (т. е. France). Второе правило указывает, что «nina предпочитает то, что предпочитают igor и anna одновременно» (т. е. Germany). Созданной программе можно задать цель:
goal
likes(X,»Spain»), write(X), nl, fail.
Символ Х обозначает наличие в запросе переменной. Результатом решения программы будет нахождение значения Х, удовлетворяющего поставленной цели, т. е.:
goal
likes(igor,R), write(R,», «), nl, fail.
будут найдены все решения, удовлетворяющие цели, а именно:
goal
likes(X,R), write(X,» «,R), nl, fail.
будут выведены на экран все возможные значения пар (Х,Y), т. е.
Пример 1.2. Рассмотрим пример решения квадратного уравнения .
predicates % Описание предикатов
equation(real, real, real).
answer(real, real, real).
% Предикат, описывающий дискриминант
equation(A,B,C):- D = B*B — 4*A*C,
write(«Not real answer»).
answer(A,B,D):- % D=0 — единственное решение
write(«One solve X=», X).
answer(A,B,D):- % D>0 — не единственное решение
write(«Two solves X1=»,X1,» X2=»,X2).
Тогда, на запрос
на экране появится Not real answer
будет решение One solve X=-1
будет выдано решение Two solves X1=10 X2=5
Варианты заданий
Задание 1.1. Имеется N объектов и заданы отношения между ними: родитель, мужчина, женщина. Требуется определить новое отношение и выявить круг лиц, ему удовлетворяющих.
1. Определить предикат ОТЕЦ и найти всех отцов.
2. Определить предикат МАТЬ и найти всех матерей.
3. Определить предикат ДЕТИ и найти всех детей конкретного лица.
4. Определить предикат ВНУКИ и найти всех внуков конкретного лица.
5. Определить предикат СЫН и найти всех сыновей и сыновей конкретного лица.
6. Определить предикат ДОЧЬ и найти всех дочерей и дочерей конкретного лица.
7. Определить предикат ДЕДУШКА и найти всех дедушек и дедушек конкретного лица.
8. Определить предикат БАБУШКА и найти всех бабушек и бабушек конкретного лица.
9. Определить предикат ДВОЮРОДНЫЙ ДЕДУШКА и найти всех двоюродных дедушек и двоюродных дедушек конкретного лица.
10. Определить предикат ДВОЮРОДНАЯ БАБУШКА и найти всех двоюродных бабушек и двоюродных бабушек конкретного лица.
11. Определить предикат ТЕТЯ и найти всех тетей и тетей конкретного лица.
12. Определить предикат ДЯДЯ и найти всех дядей и дядей конкретного лица.
13. Определить предикат БРАТ и найти всех братьев и братьев конкретного лица.
14. Определить предикат СЕСТРА и найти всех сестер и сестер конкретного лица.
15. Определить предикат ДВОЮРОДНЫЙ БРАТ и найти всех двоюродных братьев и двоюродных братьев конкретного лица.
16. Определить предикат ДВОЮРОДНАЯ СЕСТРА и найти всех двоюродных сестер и двоюродных сестер конкретного лица.
17. Определить предикат ТРОЮРОДНЫЙ БРАТ и найти всех троюродных братьев и троюродных братьев конкретного лица.
18. Определить предикат ТРОЮРОДНАЯ СЕСТРА и найти всех троюродных сестер и троюродных сестер конкретного лица.
19. Определить предикат ПЛЕМЯННИК и найти всех племянников и племянников конкретного лица.
20. Определить предикат ПОТОМОК и найти всех потомков и потомков конкретного лица.
21. Определить предикат ПРЕДОК и найти всех предков и предков конкретного лица.
22. Определить предикат ПОТОМОК МУЖСКОГО ПОЛА и найти всех потомков мужского пола и потомков мужского пола конкретного лица.
23. Определить предикат ПОТОМОК ЖЕНСКОГО ПОЛА и найти всех потомков женского пола и потомков женского пола конкретного лица.
24. Определить предикат ПРЕДОК МУЖСКОГО ПОЛА и найти всех предков мужского пола и предков мужского пола конкретного лица.
25. Определить предикат ПРЕДОК ЖЕНСКОГО ПОЛА и найти всех предков женского пола и предков женского пола конкретного лица.
Задание 1.2. Написать программу на Прологе.
1. Заданы три числа a, b, c. Определить, сколько среди них положительных.
2. Заданы четыре числа a, b, c, d. Определить количество нулевых значений.
3. Заданы четыре числа a, b, c, d. Определить, сколько среди них отрицательных.
4. Задана прямая . Для произвольной точки определить, как расположена она относительно прямой: выше прямой; на прямой; ниже прямой.
5. Заданы три числа a, b, c. Определить, являются ли они упорядоченными: по возрастанию; равны (a = b = c); по убыванию; не упорядочены. Сколько среди них отрицательных?
6. Заданы три числа a, b, c. Найти сумму положительных чисел.
7. Заданы три числа a, b, c. Определить, сколько среди них отрицательных.
8. Заданы три числа a, b, c. Определить среди них количество максимумов.
9. Заданы три числа a, b, c. Определить среди них количество минимумов.
10. Заданы три числа a, b, c. Определить минимальное значение среди положительных.
11. Заданы три числа a, b, c. Определить максимальное значение среди отрицательных.
12. Для произвольных чисел a, b, c определить количество действительных корней уравнения .
13. Заданы три точки , , . Определить их взаимное расположение: все точки совпадают; две точки совпадают, а третья отличается; все точки отличаются.
14. Заданы три точки , , . Определить их взаимное расположение: точки лежат на одной прямой; точки образуют невырожденный треугольник.
15. Задана система координат в пространстве и произвольная точка (x, y, z). Определить, как расположена точка относительно системы координат: в начале системы координат; на одной из осей; вне осей координат.
16. Заданы прямая и две точки , . Определить их взаимное расположение: точки по одну сторону прямой; точки по разные стороны от прямой; одна точка на прямой, а другая — нет; обе точки на прямой.
17. Задана система координат на плоскости и произвольная точка (x, y). Определить, где лежит точка: на пересечении осей координат; на оси Х; на оси Y; вне осей координат.
18. Задана система координат на плоскости и произвольная точка (x, y). Определить, где лежит точка: на осях координат; в I квадранте; во II квадранте; в III квадранте; в IV квадранте.
19. Задана окружность с центром (x, y) и радиусом r. Определить взаимное расположение окружности и осей координат: окружность пересекает обе оси; окружность пересекает только ось Х; окружность пересекает только ось Y; окружность не пересекает осей координат.
20. Задан отрезок своими концами , . Определить взаимное расположение отрезка и осей координат: отрезок параллелен оси Х; отрезок параллелен оси Y; отрезок не параллелен осям координат; отрезок вырожден.
21. Задан отрезок своими концами , . Определить взаимное расположение отрезка и осей координат: отрезок лежит на какой-то оси координат; отрезок параллелен какой-то оси координат; отрезок не параллелен осям координат.
22. Задан треугольник своими сторонами a, b, c. Определить, образуют ли они: равносторонний треугольник; равнобедренный треугольник; не образуют треугольника.
23. Задан треугольник своими сторонами a, b, c. Определить, образуют ли они: прямоугольный треугольник; тупоугольный треугольник; остроугольный треугольник; не образуют треугольника.
24. Заданы прямые , . Определить их взаимное расположение: пересекаются; параллельны; совпадают.
25. Заданы два круга с центрами , и радиусами , соответственно. Определить взаимное расположение кругов: один внутри другого; пересекаются; не пересекаются.
ЛАБОРАТОРНАЯ РАБОТА №2
Источник: megalektsii.ru
Цели в Прологе. Внутренние цели. Внешние цели
Цель — это формулировка задачи, которую программа должна решить. Цель состоит из взаимосвязанных предикатов. Структура цели точно такая же, как у правила или факта.
Цель используется для запуска процесса выполнения программы. Пролог пытается сопоставить цель с фактами и правилами программы. Если цель является фактом, таким как «любит(мэри, яблоки)», то Пролог отвечает True (истина) или False (ложь). Если цель содержит переменные, то Пролог выдает либо те их значения, которые приводят к решению, если оно существует, либо сообщение No solutions (решений нет).
Внешние цели заставляют внутренние унификационные подпрограммы Пролога найти все решения, удовлетворяющие цели. Внутренние цели заставляют внутренние унификационные подпрограммы останавливаться после первого успешного сопоставления цели.
Схема работы программы:
likes — это отношение (символ предиката). Этот же самый символ likes может быть использован как цель. Предикат цели сопоставляется с предикатами в программе.
В ответ на запрос системы, необходимо ввести цель – likes(beth,apples) Такая цель является внешней. Программы Пролога (Prolog) с внешней целью называются интерактивными. Смысл применения внешних целей — дать пользователю полную свободу использования имеющихся данных. Программа в этом случае играет роль «нейтральной» базы данных.
Эта цель фактически означает, что вы хотите знать, действительно ли Бет любит яблоки в соответствии с информацией, имеющейся в программе. После ввода цели Пролог начинает поиск правил и фактов программы для сопоставления с предикатом likes.
Пытаясь выполнить цель, Пролог просматривает программу слева направо, выполняя поиск предиката с тем же предикатным термом, что и целевой предикат. Если предикат цели и предикат факта совпадают, Пролог пытается сопоставить первые объекты в цели и в факте, затем вторые объекты и т.д. Аналогичным образом Пролог просматривает все факты.
predicates likes(symbol,symbol) clauses likes(mary, apples). likes(beth, X) if likes(mary, X).
Фактически Пролог осуществляет поиск строки программы (факта или правила), которые совпадут с введенной целью с учетом имеющихся в фактах и правилах переменных.
Следующая программа проверяет нескольких целей:
любит ли beth что-то?;
любит ли beth mary?
На запрос цели необходимо ввести likes(beth, apples) или likes(beth,mary)
predicates likes(symbol,symbol) clauses likes(mary, apples). likes(mary,beth). likes(beth, X) if likes(mary, X). /* beth любит это, если mary любит это */ likes(beth, X) if likes(X, beth). /* beth любит mary, если mary любит beth */
Подцели
Так как цели, подобно фактам и правилам, строятся из предикатов, то цели также могут иметь связки and и or. (См. Связки в правилах) Цели, имеющие связки, называются целями, имеющими подцели. Подцели утверждения цели разделяются запятыми точно так же, как условия в правилах.
Когда цель введена в программу на Прологе, то подцели обрабатываются слева направо. Осуществляется попытка сопоставить подцели с фактами и правилами программы. Если одна из подцелей несопоставима, то вся цель является неуспешной. Если все подцели сопоставимы, то вся цель является успешной.
Например, программа содержит следующие утверждения:
likes(mary,apples). /* Мэри любит яблоки */ color(apples,red). /* цвет яблок красный */
Введем цель. Подцели этой цели разделены запятой и точка завершает цель как целое.
/* «Любит ли Мэри яблоки, и красные ли эти яблоки?». */ likes(mary,apples), color(apples,red).
Самая левая подцель likes(mary,apples) сопоставима с утверждением likes(mary,apples), так что эта подцель успешна. Следующая подцель справа сопоставима с утверждением color(apples,red), и поэтому вся цель является успешной.
Новая цель «Любит ли Мэри красные яблоки?» отличается от предыдущей. Ранее требовалось только проверить факты, что Мэри любит яблоки и что эти яблоки красные. В новой цели необходимо знать, любит ли Мэри яблоки, если они красные.
Яблоки могут быть и красные, и зеленые, и желтые. Но Мэри может вообще не любить яблоки, либо же она их любит, но они не красные. В таком случае ответ False.
Для того, что бы ввести эти факты в программу, необходимо убрать утверждение likes(mary,apples). и добавить правило likes(mary,apples) :- color(apples,red).
По-русски это правило читается как «Мэри любит яблоки, если они красные».
Если вы хотите узнать «Любит ли Мэри яблоки?», то используйте цель likes(mary,apples).
predicates color (symbol,symbol) likes(symbol,symbol) clauses color(apples,red). /* Определение цвета яблок — красные */ likes(mary,apples) :- color(apples,red). /* Мэри любит яблоки, если они красные. */ goal /* Ввод цели: «Любит ли Мэри яблоки?» . Да, потому что они красные. */ likes(mary,apples), write(«Mary likes apples, because apples red.»),nl.
Даже если цель сама по себе не имеет подцелей, то Пролог все равно должен сопоставить правило с условием с соответствующим утверждением.
Фактически Пролог создает подцель и сопоставляет цель likes(mary,apples) с головой правила likes(mary,apples). Это правило имеет условие color(apples,red). Поэтому это условие должно быть доказано для того, чтобы цель могла быть успешной. То есть цвет яблок (красный) должен быть определён ранее — color(apples,red).
Другими словами, если голова (левая часть) правила сопоставима с целью, то факты правой части становятся подцелями, которые Пролог должен вычислить, обрабытывая их слева направо. Для доказательства головы правила, должны быть доказаны условия тела правила точно так же, как если бы целевое утверждение состояло из связки этих подцелей.
Пролог успешно доказывает созданную подцель, обнаружив среди утверждений факт color(apples,red). Доказав эту подцель, Пролог доказал, что голова правила истинна. Так как голова правила сопоставима с целью, то цель является успешной.
Чтобы понять как Пролог генерирует внутренние подцели, можно считать, что условия справа от if (или символа :- ) становятся подцелями исходной цели, когда, пытаясь доказать эту цель, Турбо-Пролог сопоставляет ее с головой правила.
Внутренние цели в Прологе (Prolog)
В программе «Синонимы» в самом теле программы мы использовали внутреннюю цель:
clauses synonym(brave,daring). /* внутренняя цель */ goal synonym(brave,X), write(«A synonym for ‘brave’ is «), nl, write(» «,X,».»), nl.
Само предложение, определяющее цель, состоит из пяти подцелей, разделенных запятыми.
synonym(brave,X)
Х здесь является свободной переменной, ее значение не конкретизировано. (Имя переменной обязательно начинается с большой буквы.) Говоря обычным языком, в данном предложении сформулирована такая цель:
«Найти утверждение, использующее предикат synonym, такое, что первым объектом в нем является brave, и связать переменную Х с его вторым объектом».
После запуска программы, Турбо-Пролог будет просматривать утверждения, содержащие synonym. Если таковое с объектом brave будет обнаружено, то Х примет значение второго объекта — daring.
Второй подцелью является печать следующей строки символов на экране:
A synonym for ‘brave’ is
Эта подцель образована при помощи предиката write, одного из многих «встроенных» предикатов Турбо-Пролога. Подобные предикаты не требуют специального описания в программе, их можно использовать сразу.
Встроенный предикат write в данной программе встречается в виде:
write(«A synonym for ‘brave’ is «),
Двойные кавычки при этом применяются для ограничения символьной строки A synonym for ‘brave’ is; подобным образом должны выделяться все символьные строки. Предикат write может также содержать имена переменных, в этом случае кавычки не требуются.
Простейшим примером может служить:
write(X),
где Х — это имя переменной. Если Х принял значение daring, то write это daring и напечатает.
В обоих случаях, как символьная строка, так и переменная являются аргументами предиката write. Так же как и у других предикатов, аргументы write разделяются запятыми. Аргументы можно произвольно смешивать при условии соблюдения описываемых соглашений.
Компилятор Пролога поправит Вас, если Вы пропустите кавычки, или сделаете какую-либо другую ошибку того же порядка.
Пример смешанной записи аргументов:
write(“Today is the “,N,”th day of “,M,”, a “,D,”.”).
Этот предикат напечатает предложение
Today is the 19th day of August, a Tuesday. (Сегодня 19 августа, вторник)
если значениями переменных N, M и D будут соответственно 19, August и Tuesday.
Третья подцель задается еще одним встроенным предикатом: nl. Предикат nl переводит курсор в начало следующей строки.
Четвертая подцель — печать всех трех объектов, заключенных в круглые скобки. Первый из них представляет собой обычную кавычку; второй, обозначенный как Х, — это daring; третий состоит из кавычки и точки.
Пятая подцель, еще один предикат nl, переводит курсор к началу строки, следующей за строкой с daring.
Предложение, описывающее цель, должно оканчиваться точкой; если точка будет опущена, компилятор выдаст сообщение об ошибке, и трансляция программы будет прекращена.
Результат выполнения программы:
A synonym for brave is ‘daring’.
Внешние цели в Прологе (Prolog)
Если Вы запустите на счет программу, в которой будет отсутствовать описание цели или внутренняя цель, то Пролог (Prolog) попросит вас ввести цель с экрана. Такая цель является внешней целью. Программы Пролога с внешней целью называются интерактивными.
Цель применения внешних целей — дать пользователю полную свободу использования имеющихся данных. Программа в этом случае играет роль «нейтральной» базы данных.
Если, например, из программы «Синонимы» удалить раздел goal и запустить ее на счет, то на экране в окне возникнет приглашение Goal: .
Допустим, вы хотите задать вопрос: «Какое слово является синонимом слова brave?» Так же, как и при записи внутренней цели, переменная Q будет использоваться для представления значения, которое Пролог (Prolog) поставит ей в соответствие, используя утверждения базы данных. С ее помощью вопрос формулируется в виде:
synonym(brave,Q).
После выполнения внешней цели выполнение программы, однако, не завершается. Пролог (Prolog) просит ввести следующую внешнюю цель. Таким образом можно задать столько целей, сколько это представляется необходимым; чтобы остановить этот процесс нужно нажать клавишу Esc при выдаче очередного приглашения.
В формулировке запроса к программе можно использовать не только одну переменную, но и несколько. Если, к примеру, Вы введете две переменные, то программа выдаст все возможные комбинации значений, удовлетворяющие данным переменным.
Применение внешних целей бывает полезно при записи коротких целевых формулировок, а также для получения всего набора допустимых значений. Другое преимущество внешних целей — они позволяют адресовать базе данных совершенно произвольные запросы.
Использование правил в запросах
Целевые утверждения (утверждения с целью) обеспечивают одну из возможностей осуществления запросов к программе. Запросы строятся из предикатов, содержащих условия, которые ограничивают пути поиска желаемых результатов, причем, в случае, когда какой-либо запрос нужно повторить несколько раз, разумно предусмотреть возможность не задавать всякий раз одни и те же условия, что утомительно. Полезно также для получения ответов из базы данных не использовать фактов из базы данных.
В Prolog (Прологе) эта задача решается конструированием правил, не содержащих в себе данных, то есть правил нулевой арности. (См. «Предикаты разных арностей») Программа сама перебирает и находит нужные значения, удовлетворяющие правилам. Задача, таким образом, сводится к написанию сокращенного варианта запроса.
Представим себе некую гипотетическую семью: Фрэнк и Мэри являются мужем и женой. Их сына зовут Сэмом, а дочку — Дебби. Ниже приведен небольшой диалог, касающийся этой семьи.
Вопрос: Кем приходятся друг другу Дебби и Сэм? Ответ: Дебби — сестра Сэма. Вопрос: Из чего Вы это заключили? Ответ: У Дебби и Сэма одни и те же родители, Дебби — девочка. Таким образом, Дебби — сестра Сэма.
Второй из вопросов является разговорной формулировкой правила, которое будет использоваться для ответа на запрос. Это правило можно перефразировать таким образом:
/* заключение или логическое следствие */ Дебби — сестра Сэма, если /* допущение или предпосылка. */ Дебби — существо женского пола, и родители Дебби есть родители Сэма.
Фраза включает в себя условие «если» (if или :- ), которое логически связывает оба утверждения. Утверждение, предшествующее «если» называется заключением или логическим следствием, а утверждение, следующее за «если» — допущением или предпосылкой.
Предикатные выражения являются теми блоками, из которых в Прологе строятся правила. Факты, описывающие отношения между Фрэнком, Мэри, Сэмом и Дебби можно сформулировать при помощи таких утверждений Пролога:
male(«Frank»). /* Фрэнк — мужского пола */ male(«Sam»). /* Сэм — мужского пола */ female(«Mary»). /* Мэри — женского пола */ female(«Debbie»). /* Дебби — женского пола */ parents(«Sam»,«Frank»,«Mary»). /* Родители Сэма есть Фрэнк и Мери */ parents(«Debbie»,«Frank»,«Mary»). /* Родители Дебби есть Фрэнк и Мери */
Имея в наличии эти утверждения, необходимо лишь ввести правило, задающее отношение брат-сестра:
sister(Sister,Brother) if female(Sister), parents(Sister,Father,Mother), parents(Brother,Father,Mother).
В формулировке правила нет никаких данных о конкретной семье; объекты Sister, Brother, Father и Mother являются переменными. Двойное использование предиката parents устанавливает логическую связь между переменными Sister и Brother. Наличие предиката female позволяет выбрать ребенка женского пола. Три предиката предпосылки правила вполне достаточны для получения нужного заключения.
Программа «Родственники» демонстрирует использование перечисленных фактов и правила sister.
domains person = symbol predicates male(person) /* мужчины */ female(person) /* женщины */ parents(person,person,person) /* ребёнок и его родители */ sister(person,person) /* сестра */ who_is_the_sister /* предикат нулевой арности */ clauses /* факты */ male(«Frank»). /* отец */ male(«Sam»). /* сын */ female(«Mary»). /* мать */ female(«Debbie»). /* сестра */ parents(«Sam»,»Frank»,»Mary»). /*родители Sam — Frank и Mary */ parents(«Debbie»,»Frank»,»Mary»). /*родители Sam — Frank и Mary */ /* правило, задающее отношение брат-сестра */ sister(Sister,Brother) :- female(Sister), male(Brother), parents(Sister,Father,Mother), parents(Brother,Father,Mother). /* правило нулевой арности для вывода результатов цели */ who_is_the_sister :- sister(Sister,Brother), write(Sister,» is the sister of «,Brother, «.»),nl. goal /* цель — это предикат и правило */ who_is_the_sister
Результат выполнения программы:
Debbie is the sister of Sam.
Программа «Родственники» содержит одно правило: предикат who_is_the_sister. who_is_the_sister является целью программы, ее единственным целевым утверждением. Само правило определяется в разделе утверждений программы clauses.
Ввиду того, что цель задается в виде правила, точка входа раздела goal являет собой единственное целевое утверждение без подцелей.
Тело правила состоит из двух частей. Первая часть это правило sister. В качестве второй части-предпосылки используется предикат write, который выводит полученные правилом sister результаты.
При разработке программы такой способ записи цели более предпочтителен, так как он упрощает эту самую запись. Особенно полезным он бывает тогда, когда программа имеет много разных подцелей, включающих в себя достаточно сложные операции. С точки зрения человека, лишь использующего эту программу, такой способ также более предпочтителен, так как упрощает процедуру запросов.
Предположим, что Вы хотите узнать имя сына. Этот запрос оформляется при помощи правила:
who_is_the_son :- parents(Son,Father,Mother), male(Son), write(«The son is «,Son,».»),nl.
Это правило можно поместить в раздел clauses и заменить этим правилом целевое утверждение:
goal who_is_the_son
Результат этого запроса: «The son is Sam».
Подобным образом можно ввести еще достаточное количество правил. Правила можно будет активизировать выборочно путем использования их в целевой конструкции. (То есть в разделе clauses задали ряд правил, а потом в разделе goal сделали запрос (целевое утверждение).
Возможность Prolog (Пролога) выбирать нужные правила делает программу более гибким и мощным инструментом. Важным непосредственным приложением данного средства программирования является возможность задания запросов в форме правил, а также возможность «запасать» эти правила для использования при дальнейшей работе с базой данных.
Источник: verim.org
4227rus тест Интеллектуальные системы
Единственный в мире Музей Смайликов
Самая яркая достопримечательность Крыма
Скачать 173.04 Kb.
129. Задача развития искусственного интеллекта чем связана?
2)исследованием игровых машинных программ
3) разработкой теории построения
диалоговых систем для общения с ЭВМ на языках близких к естественным
4)создание искусственных аналогов биологических ткани
130. Применение нейросетей требует от разработчика…
1) множество данных,содержащих информацию, что характеризует проблему 2) понимание базовой природы решаемой проблемы
3) понимание инструментальных средств разработчика
131. В какой последовательности выполняются операции над
интеллектуальным роботм?
1) составляется план операции
2) с учетомраспознавания условий работы и состояния объекта, определяется порядок действий
3) приводится в действие исполнительные механизмы робота
E) нет правильного ответа
132. Какие виды имеет сенсорные устройства?
A) устройства зрения, устройства слуха, устройства осязания
B) устройства зрения, устройства слуха
C) устройства зрения, устройства осязания
D) устройства слуха, устройства осязания
E) нет правильного ответа
133. Нейроподобные сети в области измерений могут решить следующие
1) обработка высокоскоростных цифровых потоков
2) автоматизированная систем быстрого поиска информации
3) классификация информации в реальном масштабе времени
4) планирование применения сил в и средств в больших масштабах
E) нет правильного ответа
134. Что представляет из себя сеть Петри?
A) Ориентированный граф N=
B) Ориентированный граф N=
C) Не ориентированный граф
D) Ориентированный граф N=
E) Ориентированный граф N=
135. Через ¦А¦ обозначают количество элементов конечного множества А.
Число ¦А¦ называют также
136. Наращение – это:
A) Процесс увеличения капитала за счет присоединения процентов
B) Базисный темп роста
C) Отношение наращенной суммы к первоначальной сумме долга
E) Базисный темп уменьшения
137. Дисконтирование – это:
A) Приведение будущих денег к текущему моменту времени
B) Отношение процентных денег к процентной ставке
C) Отношение суммы, затраченной на проведение финансовой операции, к
сумме, полученной в результате ее выполнения
D Приведение текущих денег к будущему моменту времени.
E) Базисный темп роста
138. Для генерации сетки массивов предусмотрена функция
139. Матрица Адамара – это квадратная матрица, состоящая из:
C) Всех натуральных чисел
D) Всех целых чисел
E) Всех действительных чисел
140. Matlab использует только первые … символ имени переменной:
141. Объекты, с которыми оперирует булева алгебра
B) различные алгебры
C) некоторые количества
D) некоторые интерпретации
142. Операции в булевой алгебре продуманы таким образом, чтобы ее можно было использовать в … рассуждениях
143. Булева алгебра применяется в
A) Компьютерной технике
D) Информационных технологиях
E) Построениях бах данных
144. Нечеткие числа…
A) нечеткие переменные, определенные на числовой оси, т.е. нечеткое число
определяется как нечеткое множество A на множестве действительных чисел
R с функцией принадлежности μA(x) Є[0,1], где x-действительное число,xЄR
B) переменные, определенные на числовой оси, т.е. нечеткое число
определяется как нечеткое множество A на множестве действительных чисел
R с функцией принадлежности μA(x) Є[0,1], где x-действительное число, xЄR
C) переменные, определенные на числовой оси, т.е. нечеткое число
определяется как нечеткое множество A на множестве действительных чисел
R с функцией принадлежности μA(x) Є[0,1]
D) нет правильного ответа
E) переменные, определенные на числовой оси, т.е. нечеткое число
определяется как нечеткое множество A на множестве действительных чисел
R с функцией принадлежности
145. Модель, основанная на представлении знаний в форме правил,
структурированных в соответствии с образцом > является:
A) продукционной моделью
B) фреймовой моделью
C) логической моделью
D) семантической сетью
146. Фрейм имеет определенную внутреннюю структуру, которая состоит из:
147. Слот — это .
A) отдельный элемент внутренней структуры фрейма
B) единица представления знаний об объекте
C) предложение — образец, по которому осуществляется поиск в базе знаний
D) факты, характеризующие объекты, процессы и явления в предметной
E) характеризующие объекты, процессы и явления в предметной области
148. При использовании продукционной модели база знаний состоит из: а.фактов в. фреймов с. условий d. правил е. слот
159. Единица представления знаний (информации) об объекте, которую можно описать некоторой совокупностью понятий и сущностей, называется
B) нет правильного ответа
150. Слот АКО во фреймовой модели представления знаний используется для
A) создания сети фреймов
B) связи с файлами данных
C) удаления фрейма
E) нет правильного ответа
151. Фрейм-прототип — это .
A) пустой фрейм, описывающий понятия
B) фрейм, описывающий конкретный объект
C) фрейм, порождающий другой фрейм
D) фрейм, связанный с другим фреймом
E) нет правильного ответа
152. Фрейм-экземпляр — это .
A) фрейм, описывающий конкретный объект
B) пустой фрейм, описывающий понятия
C) фрейм, порождающий другой фрейм
D) фрейм, связанный с другим фреймом
E) все перечисленные
153. Основным объектам формирования, обработки и исследования в области
искусственного интеллекта является:
D) модeл E) все перечисленные
154. Первые исследования в области искусственного интеллекта связаны с разработкой программ, на основе применения:
A) эвристических методов
B) продукционных методов
C) метода резолюций
D) алгоритмических методов
E) прогаммных методов
155. В настоящее время при создании нейронных сетей используются
a. аппаратный
b. нейронный
c. программный
d. алгоритмический e программно-аппаратный
f. нейропрограммный
156. В области искусственного интеллекта решаются следующие задачи:
a. Представление знаний и разработка систем, основанных на знаниях b. Разработка естественно языковых интерфейсов и машинный перевод Игры и творчество
c. Распознавание образов
d. Разработка баз данных Вычислительные задачи
157. Термин «искусственный интеллект» предложил.
158. Экспертные системы предназначены для решения
A) неформализованных задач
B) формализованных задач
C) вычислительных задач
D) управления базами данных
E) модели представления знаний
159. Начало исследований в области искусственного интеллекта относится:
A) конец 50-х годов 20 века
B) конец 60-х годов 20 века
C) конец 70-х годов 20 века
D) конец 40-х годов 20 века
E) koнец 80-х годов 20 века
160. По количеству отношений семантические сети подразделяются на:
A) однородные, неоднородные
B) однородные, бинарные
C) бинарные, неоднородные
D) бинарные, парные
161. Язык программирования ориентированный на использование
продукционной модели представления знаний называется:
162. Пpи использовании продукционной модели база знаний состоит из: фактов фреймов условий правил
163. Переменная, не имеющая значения, называется:
164. Переменная, имеющая значение, называется:
165. Формулировка задачи, которую программа должна решить, называется:
166. Язык программирования ПРОЛОГ относится к .
A) логическим языкам программирования
B) процедурным языкам программирования
C) объектно — ориентированным языкам программирования
D) проблемно — ориентированным языкам программирования
E) операционно — проблемно — ориентированным языкам программирования
167. Сколько было информационных революций? A) 5
168. В каком году была принята Хартия Глобального информационного
169. Что означает термин МОРАЛЬНО-ЭТИЧЕСКИЕ МЕРЫ ЗАЩИТЫ
A) Это традиционно сложившиеся в стране или обществе нормы поведения и
правила обращения с информацией
B) Это действующие в стране законы, указы и другие нормативные акты,
регламентирующие правила обращения с информацией и ответственность за
C) Это меры, регламентирующие процессы функционирования системы
обработки данных, использование её ресурсов.
D) Это меры, регламентирующие процессы функционирования системы
E) Это действующие в стране законы, указы и другие нормативные акты,
регламентирующие правила обращения с информацией
170. Что означает термин АУТЕНТИФИКАЦИЯ?
A) Это проверка подлинности объекта или субъекта
B) Это проверка целостности информации, программы, документа
C) все перечисленные
D) Это проверка целостности информации
E) Это присвоение имени субъекту
171. Это присвоение имени субъекту или объекту Что означает термин
ИДЕНТИФИКАЦИЯ?
A) Это присвоение имени субъекту или объекту.
B) Это проверка подлинности субъекта или объекта
C) Это проверка целостности информации, программы, документа
D) Это проверка подлинности объекта или субъекта
E) Это проверка целостности информации
172. Биологический нейрон – это
A) Специальная клетка, которая структурно состоит из ядра, тела клетки и
B) Специальная клетка, связанная с другими клетками посредством импульсов
C) Средство передачи электрохимического импульса
D) Высокая степень связности
E) Тело клетки, которое содержит ядро
173. Специальная клетка, которая структурно состоит из ядра, тела клетки и отростков называется
A) Биологический нейрон
B) Искусственный нейрон
C) Электрохимический импульс
D) Синаптическая связь
E) Дендрит или аксон
174. Множество коротких волокон, ответвляющихся от ядра, называются
E) Сомами
175. Дендрит – это
A) Множество коротких волокон, ответвляющихся от ядра
D) Окончание клетки
E) Реакция нейронов
176. Аксон– это
A) Длинный дендрит
D) Окончание клетки
E) Реакция нейронов
177. В модели нейрона можно выделить три основных элемента:
1. синапсы, каждый из которых характеризуется своим весом или силой.
2. сумматор, аналог тела клетки нейрона
3. функцию активации, определяющей окончательный выходной уровень нейрона
4. соответствующий вес, пропорциональный синаптической силе
5. множество входных сигналов
178. Нейронная сеть способна
B) Минимизировать ошибку
C) Выделять статистические свойства
D) Предъявлять на вход вектора
E) Состоять лишь из входных векторов
179. Обучающее множество состоит
A) Лишь из входных векторов
B) Из выходных векторов
C) Из входных и выходных векторов
D) Из обратных связей
E) Из достаточно близких входных векторов
180. Технология комплексного многомерного анализа данных– это
D) Все ответы верны
E) Витрина данных
181. Ключевое требование OLAP –
A) Многомерное концептуальное представление данных, включая полную
поддержку для иерархий и множественных иерархий
B) Предоставление пользователю результатов анализа за приемлемое время
(обычно не более 5 с), пусть даже ценой менее детального анализа
C) Возможность осуществления любого логического и статистического
анализа, характерного для данного приложения, и его сохранения в доступном для конечного пользователя виде
D) Многопользовательский доступ к данным с поддержкой соответствующих
механизмов блокировок и средств авторизованного доступа
E) Возможность обращаться к любой нужной информации независимо от ее
объема и места хранения
182. Какие методы используют в системах поддержки принятия решений?
A) метод аналитических иерархических процессов , метод аналитических
D) метод аналитических сетевых процессов
E) нет правильного ответа
183. На уровне данных, с которыми эти системы работают, условно можно выделить:
A) оперативные; стратегические
184. Двухуровневое хранилище данных
A) строится централизованно для предоставления информации в рамках
B) база данных, функционально-ориентированная и, как правило, содержащая
данные по одному из направлений деятельности организации.
C) предметно-ориентированный, интегрированный, неизменчивый,
поддерживающий хронологию набор данных
D) организованный для целей поддержки принятия решений, может состоять
из нескольких баз данных, имеет свою собственную модель хранения данных
E) нет правильного ответа
185. Какая система поддержки принятия решений позволяет модифицировать решения системы, опирающиеся на большие объемы данных из разных источников ?
Источник: topuch.com