
- •8. Языки и технологии программирования для искусственного интеллекта
- •8.1. Обзор языка prolog
- •8.2. Типы данных prolog
- •8.3. Структура программы на prolog
- •8.3.1. Раздел целей
- •8.3.2. Организация запросов на prolog
- •8.4. Ввод-вывод данных на prolog
- •8.5. Разветвления на prolog
- •8.6. Правила логического вывода
- •8.6.1. Понятие об унификации и конкретизации
- •8.6.2. Правило логического вывода на prolog
- •8.6.3. Задачи на упорядочение объектов
- •8.7. Рекурсия на prolog
- •8.7.1. Понятие рекурсии на prolog
- •8.7.2. Числовая рекурсия
- •8.7.3. Рекурсия в графике
- •8.8. Списки prolog. Рекурсивная обработка списков
- •8.8.1. Определение и структура списка
- •8.8.2. Рекурсивная обработка списков
- •8.9. Решение логических задач на prolog
- •8.9.1. Понятие о методе резолюций
- •8.10. Задачи, использующие структуру графа
8.6.3. Задачи на упорядочение объектов
Пример
8.5. Рыбак поймал окуня, ерша и щуку. Щуку он поймал раньше окуня, ерша позже щуки, но раньше окуня. Какая рыба поймана раньше всех?
Clauses
Раньше(щука,окунь).
Раньше(щука,ерш).
Раньше(ерш,окунь).
Порядок(X,Y,Z) if раньше(X,Y),раньше(Y,Z).
Goal
Порядок(X,Y,Z).
Упражнения
Ира и Лена одинакового роста. Лена выше Оли, Таня выше Иры. Кто выше: Таня или Оля?
Даны 4 числа X, Y, Z, T. Известно, что Х меньше Y и меньше Т; Y больше Z и больше Т; Z больше Х и меньше Т. В каком порядке расположены числа?
Возле почты растут 6 деревьев: сосна, береза, липа, тополь, ель и клен. Какое дерево самое высокое и какое самое низкое, если известно, что береза ниже тополя, липа выше клена, сосна ниже ели, липа ниже березы, сосна выше тополя.
В очереди за билетами в кино стоят Юра, Миша, Володя, Саша и Олег. Известно, что Юра купил билет раньше Миши, но позже Олега; Володя и Олег не стояли рядом; Саша не находился рядом ни с Олегом, ни с Юрой, ни с Володей. Кто за кем стоит?
На улице, встав в кружок, беседуют 4 девочки: Аня, Валя, Галя, Надя. Девочка в зеленом платье не Аня и не Валя стоит между девочкой в голубом платье и Валей. Девочка в белом платье стоит между девочкой в розовом платье и Галей. Какого цвета платье у каждой девочки?
Трое юношей Коля, Петя, Юра влюблены без взаимности в трех девушек: Таню, Зину, Галю. Кто в кого влюблен, если Коля любит девушку, влюбленную в юношу, который любит Зину; Петя любит девушку, влюбленную в юношу, который любит Галю; Зина не любит Юру.
У меня три карандаша: желтый, синий, черный. Можно ли назвать самый короткий и самый длинный в следующих случаях:
черный короче желтого, желтый короче синего;
желтый длиннее черного, черный длиннее синего.
Составить базу знаний по сказке «Репка». Определить весь ряд персонажей, тянущих репку. Составить правила:
кто первый тянет репку;
кто тянет после бабки;
кто на 4 месте?
Воробей, дятел и синица сидели на одной ветке. В каком порядке они сидели, если:
синица сидела слева от дятла, а воробей слева от синицы;
дятел сидел слева от синицы и справа от воробья;
воробей сидел справа от синицы, а дятел справа от воробья.
Береза выше рябины, но ниже тополя. Кто выше: рябина или тополь. Какое дерево самое низкое?
Назовите имена мальчиков самого высокого, среднего и самого низкого, если
Вася ниже Коли, Коля ниже Толи;
Вася ниже Толи, Толя выше Коли.
О четырех числах X, Y, Z, T известно, что Y меньше Х и меньше Т, Х больше Z и больше T, Z больше Y и меньше T. Какое число самое маленькое и какое – самое большое.
8.7. Рекурсия на prolog
8.7.1. Понятие рекурсии на prolog
В предыдущем разделе мы рассмотрели организацию разветвления на PROLOG. Для программирования повторений на процедурных языках существует целая серия операторов цикла. PROLOG-система для этой цели использует совершенно иное, гораздо более мощное средство рекурсию.
Рекурсией называется обращение структуры к самой себе. Слово «рекурсия» переводится как «обратное движение, возвращение». Используют рекурсию в следующих случаях:
для описания программ, выполнению которых предшествует выполнение их собственной копии;
для описания структур, имеющих другие структуры в качестве компонент.
С первым способом использования рекурсии хорошо знакомы все, кому приходилось программировать на процедурных языках высокого уровня. Второй способ реализован только в языках логического программирования и является естественным приемом представления структур данных. Остановимся на различных вариантах этого способа.