2.6.3. Сочетание декларативного и процедурного подходов
2.6.3. Сочетание декларативного и процедурного подходов
В предыдущем разделе было показано, что порядок целей и предложений имеет существенное значение. Более того, существуют программы, которые верны в декларативном смысле, но на практике не работают. Такое противоречие между декларативным и процедурным смыслами может вызвать недовольство. Кто-нибудь спросит: "А почему вообще не забыть о декларативном смысле?" Такое пожелание становится особенно сильным, когда рассматриваются предложения типа:
предок( X, Z) :- предок( X, Z).
Это предложение верно в декларативном смысле, но совершенно бесполезно в качестве рабочей программы.
Причина, по которой не следует забывать о декларативном смысле, кроется в том, что прогресс, достигнутый в технологии программирования, получен на пути продвижения от учета всех процедурных деталей к концентрации внимания на декларативных аспектах, которые обычно легче формулировать и понимать. Сама система, а не программист, должна нести бремя заботы о процедурных деталях. В этом Пролог оказывает некоторую помощь, хотя, как мы видели в данном разделе, помощь лишь частичную: иногда он правильно прорабатывает эти процедурные детали, иногда — нет. Многие придерживаются мнения, что лучше иметь хоть какую-то декларативную семантику, чем никакой (отсутствие декларативной семантики характерно для многих других языков программирования). Практическим следствием такого взгляда является тот факт, что часто довольно легко получить работающую программу, имея программу декларативно корректную. Поэтому практичным следует признать такой подход: сосредоточиться на декларативных аспектах задачи, затем пропустить на машине полученную программу и, если она окажется процедурно неправильной, попытаться изменить порядок следования предложений и целей.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Сочетание блоков finally и except
Сочетание блоков finally и except Один try-блок может иметь только один блок finally или только один блок except, но не может иметь оба указанных блока одновременно. Поэтому нижеприведенный код вызовет появление ошибок на стадии компиляции. __try { /* Блок контролируемого кода. */} __except
Сочетание сильного и слабого нажимов
Сочетание сильного и слабого нажимов Известны случаи, когда сильный нажим сочетается с легким. Скорее всего, речь в таких случаях может идти о чувствительном человеке с бурным темпераментом. Такому человеку хочется, однако далеко не всегда удается контролировать себя,
Аномальные лягушки и здоровье среды: поиски новых подходов на границе Европы и Азии Дмитрий Шабанов
Аномальные лягушки и здоровье среды: поиски новых подходов на границе Европы и Азии Дмитрий Шабанов Опубликовано 06 октября 2013 Сентябрь оказался для меня совершенно сумасшедшим месяцем. Кроме прочего, я совсем выпал из написания колонок. За месяц