Вход/Регистрация
Prolog
вернуться

Неизвестно

Шрифт:

Стилистические соглашения такого рода могут варьироваться от программы к программе, так как они зависят от задачи и от личного вкуса. Важно, однако, чтобы на протяжении одной программы постоянно применялись одни и те же соглашения.

Оператор отсечения следует применять с осторожностью. Если легко можно обойтись без него - не пользуйтесь им. Всегда, когда это возможно, предпочтение следует отдавать "зеленым отсечениям" перед "красными". Как говорилось в гл. 5, отсечение называется "зеленым", если его можно убрать, на затрагивая декларативный смысл предложения. Использование "красных отсечений" должно ограничиваться четко определенными конструкциями, такими как оператор not или конструкция выбора между альтернативами. Примером последней может служить

если Условие то Цель1 иначе Цель2

С использованием отсечения эта конструкция переводится на Пролог так:

Условие, !. % Условие выполнено?

Цель1; % Если да, то Цель1

Цель2 % Иначе - Цель2

Из-за того, что оператор not связан с отсечением, он тоже может привести к неожиданностям. Поэтому, применяя его, следует всегда помнить точное прологовское определение этого оператора. Тем не менее, если приходится выбирать между not и отсечением, то лучше использовать not, чем какую-нибудь туманную конструкцию с отсечением.

Внесение изменений в программу при помощи assert и retract может сделать поведение программы значительно менее понятным. В частности, одна и та же программа на одни н те же вопросы будет отвечать по-разному в разные моменты времени. В таких случаях, если мы захотим повторно воспроизвести исходное поведение программы, нам придется предварительно убедиться в том, что ее исходное состояние, нарушенное при обращении к assert и retract, полностью восстановлено.

Применение точек с запятой может затемнять смысл предложений. Читабельность можно иногда улучшить, разбивая предложения, содержащие точки с запятой, на несколько новых предложений, однако за это, возможно, придется заплатить увеличенном длины программы и потерей в ее эффективности.

Для иллюстрации некоторых положений данного раздела рассмотрим отношение

слить( Спис1, Спис2, Спис3)

где Спис1 и Спис2– упорядоченные списки, а Спис3– результат их слияния (тоже упорядоченный). Например:

слить( [2, 4, 7], [1, 3, 4, 8], [1, 2, 3, 4, 4, 7, 8] )

Вот стилистически неудачная реализация этого отношения:

слить( Спис1, Спис2, Спис3) :-

Спис1 = [ ], !, Спис3 = Спис2;

% Первый список пуст

Спис2 = [ ], !, Спис3 = Спис1;

% Второй список пуст

Спис1 = [X | Остальные],

Спис2 = [Y | Остальные],

( Х < Y, !,

Z = X, % Z - голова Спис3

слить( Остальные1, Спис2, Остальные3 );

Z = Y,

слить( Спис1, Остальные2, Остальные3 ) ),

Спис3 = [Z | Остальные3].

Вот более предпочтительный вариант, не использующий точек с запятой:

слить( [ ], Спис, Спис).

слить( Спис, [ ], Спис).

слить( [X | Остальные1], [Y | Остальные2], [X | Остальные3] ) :-

Х < Y, !,

слить(Остальные1, [Y | Остальные2], Остальные3).

  • Читать дальше
  • 1
  • ...
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: