SoftCraft
разноликое программирование

Top.Mail.Ru

Декларативное программирование


[ Содержание | 1 | 2 | 3 | 4 | 5 | 5.1 | 5.2 | 5.3 | 5.4 | 5.5 | 5.6 | 5.7 | 5.8 | 5.9 | 6 | 6.1 | 6.2 | 6.3 | 6.4 | 6.5 | 7 | 7.1 | Литература ]


© 2003 И.А. Дехтяренко

6. Логическое программирование.

Рассуждая логически, логическое программирование - программирование, основанное на  логике. Часто его определяют как использование языка логики в качестве языка программирования, вместе с использованием логического вывода в качестве вычислительного механизма. Это очень хорошее определение, но оно очень широкое. Логическое программирование, определеннное таким образом, включает в себя то же функциональное программирование как и многие другие стили программирования.

Исторически сложилось так, что термином "логическое программирование" обозначают использование в качестве языка программирования некоторго подмножества чистой логики первого порядка. Это означает, что для выражения концепции действия применяется математическое понятие отношения или предиката.

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

A, если B1 и B2 и ... Bn

и как определение процедуры

чтобы выполнить A 
  выполнить B1; 
  выполнить B2;
  ... 
  выполнить Bn.

Но такое узкое понятие следует признать слишком ограничительным. Многие языки программирования заслуживающие названия "логических" не вписываются в эту схему. С другой стороны, тот же Пролог содержит элементы логики второго порядка. А некоторые свойства Пролога при казуистическом подходе вообще не позволяют отнести его к декларативным языкам.

Тем не менее, Пролог остается наиболее распространенным языком логического программирования. и именно его мы будем использовать. На примере Пролога мы рассмотрим специфические свойства логических программ, которые делают логическое программирование хорошо подходящим для некоторых применений, таких как дедуктивные базы данных, синтаксический анализ (особенно неоднозначных грамматик) и сложные комбинаторные задачи.

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


[ Содержание | 1 | 2 | 3 | 4 | 5 | 5.1 | 5.2 | 5.3 | 5.4 | 5.5 | 5.6 | 5.7 | 5.8 | 5.9 | 6 | 6.1 | 6.2 | 6.3 | 6.4 | 6.5 | 7 | 7.1 | Литература ]