множподмножеств( Мн, Подмн)
для вычисления множества всех подмножеств данного множества (все множества представлены списками).
7. 9. Используя bagof, определите отношение
копия( Терм, Копия)
чтобы Копияпредставляла собой Терм, в котором все переменные переименованы.
Резюме
В любой реализации Пролога обычно предусматривается набор встроенных процедур для выполнения различных полезных операций, несуществующих в чистом Прологе. В данной главе мы рассмотрели подобное множество предикатов, имеющееся во многих реализациях.
Тип терма можно установить при помощи следующих предикатов:
var( X) Х - (неконкретизированная) переменная
nonvar( X) Х - не переменная
atom( X) Х - атом
integer( X) Х - целое
atomic( X) Х - или атом, или целое
Термы можно синтезировать или разбирать на части:
Терм =.. [Функтор [ СписокАргументов]
functor( Терм, Функтор, Арность)
arg( N, Терм, Аргумент)
name( атом, КодыСимволов)
Программу на Прологе можно рассматривать как реляционную базу данных, которую можно изменять при помощи следующих процедур:
аssert( Предл) добавляет предложение Предлк программе
аssегtа( Предл) добавляет в начало
asserfz( Предл) добавляет в конец
rеtrасt( Предл) удаляет предложение,
сопоставимое с предложением Предл
Все объекты, отвечающие некоторому заданному условию, можно собрать в список при помощи предикатов:
bagof( X, Р, L) L - список всех X, удовлетворяющих условию Р
setof( X, Р, L) L - отсортированный список всех X,
удовлетворяющих условию Р
findall( X, Р, L) аналогичен bagof
repeat- средство управления, позволяющее порождать неограниченное число альтернатив для автоматического перебора.
Назад | Содержание | Вперёд
Назад | Содержание | Вперёд
Глава 8
СТИЛЬ И МЕТОДЫ ПРОГРАММИРОВАНИЯ
В этой главе мы рассмотрим некоторые общие принципы хорошего программирования и обсудим, в частности. следующие вопросы: "Как представлять себе прологовские программы? Из каких элементов складывается хороший стиль программирования на Прологе? Как отлаживать пролог - программы? Как повысить их эффективность?"
8. 1. Общие принципы хорошего программирования
Главный вопрос, касающийся хорошего программирования, - это вопрос о том, что такое хорошая программа. Ответ на этот вопрос не тривиален, поскольку существуют разные критерии качества программ.
Следующие критерии общеприняты:
Правильность . Хорошая программа в первую очередь должна быть правильной, т. е. она должна делать именно то, для чего предназначалась. Это требование может показаться тривиальным и самоочевидным. Однако в случае сложных программ правильность достигается не так часто. Распространенной ошибкой при написании программ является пренебрежение этим очевидным критерием, когда большее внимание уделяется другим критериям - таким, как эффективность.
Эффективность . Хорошая программа не должна попусту тратить компьютерное время и память.
Простота, читабельность . Хорошая, программа должна быть легка для чтения и понимания. Она не должна быть более сложной, чем это необходимо. Следует избегать хитроумных программистских трюков, затемняющих смысл программы. Общая организация программы и расположение ее текста должны облегчать ее понимание.
Удобство модификации . Хорошая программа должна быть легко модифицируема и расширяема. Простота и модульная организация программы облегчают внесение в нее изменений.
Живучесть . Хорошая программа должна быть живучей. Она не должна сразу "ломаться", если пользователь введет в нее неправильные или непредусмотренные данные. В случае подобных ошибок программа должна сохранять работоспособность и вести себя разумно (сообщать об ошибках).
Документированность . Хорошая программа должна быть хорошо документирована. Минимальная документация - листинг с достаточно подробными комментариями.
Степень важности того или иного критерия зависит от конкретной задачи, от обстоятельств написания программы, а также от условий ее эксплуатации. Наивысшим приоритетом пользуется, без сомнения, правильность. Обычно простоте, удобству модификации, живучести и документированности придают во крайней мере не меньший приоритет, чем эффективности.
Читать дальше