Книга: Программирование на языке Пролог для искусственного интеллекта
8.2.1. Использование рекурсии
8.2.1. Использование рекурсии
Этот принцип состоит в том, чтобы разбить задачу на случаи, относящиеся к двум группам:
(1) тривиальные, или "граничные" случаи;
(2) "общие" случаи, в которых решение получается из решений для (более простых) вариантов самой исходной задачи.
Этот метод мы использовали в Прологе постоянно. Рассмотрим еще один пример: обработка списка элементов, при которой каждый элемент преобразуется по одному и тому же правилу. Пусть это будет процедура
преобрспис( Спис, F, НовСпиc)
где Спис
— исходный список, F
— правило преобразования (бинарное отношение), а НовСпиc
— список всех преобразованных элементов. Задачу преобразования списка Спис
можно разбить на два случая:
(1) Граничный случай: Спис = []
Если Спис = []
, то НовСпиc = []
, независимо от F
(2) Общий случай: Спис = [X | Хвост]
Чтобы преобразовать список вида [X | Хвост]
, необходимо:
преобразовать список Хвост
; результат — НовХвост
;
элемент X
по правилу F
; результат — НовХ
;
результат преобразования всего списка — [НовХ | НовХвост]
.
Тот же алгоритм, изложенный на Прологе:
преобрспис( [], _, []).
преобрспис( [X | Хвост], F, [НовХ | НовХвост] :-
G =.. [F, X, НовХ],
саll( G),
пpeoбpcпиc( Хвост, F, НовХвост).
Одна из причин того, что рекурсия так естественна для определения отношений на Прологе, состоит в том, что объекты данных часто сами имеют рекурсивную структуру. К таким объектам относятся списки и деревья. Список либо пуст (граничный случай), либо имеет голову и хвост, который сам является списком (общий случай). Двоичное дерево либо пусто (граничный случай), либо у него есть корень и два поддерева, которые сами являются двоичными деревьями (общий случай). Поэтому для обработки всего непустого дерева необходимо сначала что-то сделать с его корнем, а затем обработать поддеревья.
- 8.2.3. Использование рисунков
- Увеличение глубины рекурсии процедур и триггеров
- 7. Использование автоматизированных действий
- Простой и гибкий hover с использованием opacity
- 7. Использование фото- и видеоматериалов выставки
- 6. Использование метафор и эмоций
- 1. Использование QR-кодов
- Пример 22-9. Использование локальных переменных при рекурсии
- 8. Использование изображений и интерактивность Коллажи и карты с картинками
- Второе исследование: с использованием реальных покупок
- 4. Использование личных чувств
- 6. Использование HTML5 сейчас