• В любой реализации Пролога обычно предусматривается набор встроенных процедур для выполнения различных полезных операций, несуществующих в чистом Прологе. В данной главе мы рассмотрели подобное множество предикатов, имеющееся во многих реализациях.
• Тип терма можно установить при помощи следующих предикатов:
var( X) X — (неконкретизированная) переменная
nonvar( X) X — не переменная
atom( X) X — атом
integer( X) X — целое
atomic( X) X — или атом, или целое
• Термы можно синтезировать или разбирать на части:
Терм =.. [Функтор [ СписокАргументов]
functor( Терм, Функтор, Арность)
arg( N, Терм, Аргумент)
name( атом, КодыСимволов)
• Программу на Прологе можно рассматривать как реляционную базу данных, которую можно изменять при помощи следующих процедур:
аssert( Предл) добавляет предложение Предл к программе
аssеrtа( Предл) добавляет в начало
assertz( Предл) добавляет в конец
rеtrасt( Предл) удаляет предложение, сопоставимое с предложением Предл
• Все объекты, отвечающие некоторому заданному условию, можно собрать в список при помощи предикатов:
bagof( X, P, L) L — список всех X, удовлетворяющих условию P
setof( X, P, L) L — отсортированный список всех X, удовлетворяющих условию P
findall( X, P, L) аналогичен bagof
• repeat — средство управления, позволяющее порождать неограниченное число альтернатив для автоматического перебора.
Глава 8
Стиль и методы программирования
В этой главе мы рассмотрим некоторые общие принципы хорошего программирования и обсудим, в частности, следующие вопросы: "Как представлять себе прологовские программы? Из каких элементов складывается хороший стиль программирования на Прологе? Как отлаживать пролог-программы? Как повысить их эффективность?"
8.1. Общие принципы хорошего программирования
Главный вопрос, касающийся хорошего программирования, — это вопрос о том, что такое хорошая программа. Ответ на этот вопрос не тривиален, поскольку существуют разные критерии качества программ.
Следующие критерии общеприняты:
•
•
•
•
•
•
Степень важности того или иного критерия зависит от конкретной задачи, от обстоятельств написания программы, а также от условий ее эксплуатации. Наивысшим приоритетом пользуется, без сомнения, правильность. Обычно простоте, удобству модификации, живучести и документированности придают во крайней мере не меньший приоритет, чем эффективности.
Существует несколько общих соображений, помогающих реализовать вышеупомянутые критерии на практике. Одно важное правило состоит в том, чтобы сначала