Программирование на языке Пролог для искусственного интеллекта
Шрифт:
Рис. 8.4. Отношения в последовательности Фибоначчи. "Конфигурация" изображается здесь в виде большого круга и определяется тремя параметрами: индексом М и двумя последовательными числами f( M-1) и f( М).
8.1. Все показанные ниже процедуры
8.2. Определите отношение
добавляющее
8.3. Определите отношение
где оба списка представлены разностными парами.
8.4. Перепишите процедуру
Резюме
• Для оценки качества программы существует несколько критериев:
правильность
эффективность
простота, читабельность
удобство модификации
документированность
• Принцип пошаговой детализации — хороший способ организации процесса разработки программ. Пошаговая детализация применима к отношениям, алгоритмам и структурам данных.
• Следующие методы часто помогают находить идеи для совершенствования программ на Прологе:
Применение рекурсии: выявить граничные и общие случаи рекурсивного определения.
Обобщение: рассмотреть
Использование рисунков: графическое представление помогает в выявлении важных отношений.
• Полезно следовать некоторым стилистическим соглашениям для уменьшения опасности внесения ошибок в программы и создания программ, легких для чтения, отладки и модификации.
• В пролог-системах обычно имеются средства отладки. Наиболее полезными являются средства трассировки программ.
• Существует много способов повышения эффективности программы. Наиболее простые способы включают в себя:
изменение порядка целей и предложений
управляемый перебор при помощи введения отсечений
запоминание (с помощью
Более тонкие и радикальные методы связаны с улучшением алгоритмов (особенно, в части повышения эффективности перебора) и с совершенствованием структур данных.
Часть 2
Пролог в искусственном интеллекте
Глава 9
Операции над структурами данных
Один из фундаментальных вопросов программирования — это вопрос о представлении сложных объектов (таких как, например, множества), а также вопрос об эффективной реализации операций над подобными объектами. В этой главе мы рассмотрим несколько часто используемых структур данных, принадлежащих к трем большим семействам: спискам, деревьям и графам. Мы изучим способы представления этих структур на Прологе и составим программы, реализующие некоторые операции над ними, в том числе, сортировку списков, работу с множествами как древовидными структурами, запись элементов данных в дерево, поиск данных в дереве, нахождение пути в графе и т.п. Мы подробно разберем несколько примеров, чрезвычайно поучительных с точки зрения программирования на Прологе.
9.1. Представление списков. Сортировка
9.1.1. Замечания в некоторых альтернативных способах представления списков
В главе 3 была введена специальная система обозначений для списков (специальная прологовская нотация), которую мы и использовали в последующем изложении. Разумеется, это был всего лишь один из способов представления списков на Прологе. Список — это, в самом общем смысле, структура, которая либо
• пуста, либо
• состоит из головы и хвоста, причем хвост должен быть сам списком.
Поэтому для представления этой структуры нам необходимо иметь всего лишь два языковых средства: специальный символ, обозначающий пустой список, и функтор для соединения головы с хвостом. Мы могли бы, например, выбрать
в качестве символа, обозначающего пустой список, и атом