Пару месяцев назад я написал довольно обширный текст о том, что под логическое программирование можно подвести некую «философскую» базу. nicka_startcev, разумеется, меня немного подкалывал — а вот сегодня закономерно впал в некую ересь. Читаем:
Глобальные Правила Игры должны быть расписаны в виде алгоритмов: делай раз, делай два, проверяй три, полученную сумму заноси в такую-то кассу.
Нормальная такая точка зрения для программиста, хорошо знающего только процедурное программирование. То, что записано, как алгоритм — то понятно. Все остальное должно быть в этом виде переписано. В общем, пресловутое «алгоритмическое мышление» в крайней стадии.
Но даже те, кто зверски пихал развитие этого «алгоритмического мышления» в школьную программу, не утверждали, что оно является единственно верным. Например, А. Г. Кушниренко в своих «лекциях» для учителей информатики упоминал (часть D2) о «процедурной, функциональной и логической традиции». Обычная школьная информатика — процедурная (или «алгоритмическая»), функциональная требует понимания слова «функция«, логическое программирование кажется чем-то «не от мира сего». А ведь с ним сталкивался любой, кто не прогуливал в школе другой предмет — «Основы государства и права».
Если кто помнит, то система законодательства в юридической теории — это совокупность правовых норм, состоящих из гипотезы (условий применимости нормы), диспозиции (требуемых действий) и санкции (что будет, если диспозиция не выполнена). Эти части, как учит нас Википедия, являются опциональными — например, в большинстве статей УК нет гипотезы, а присутствует лишь диспозиция и санкция. В нормах Конституции, напротив, отсутствует санкция — зато ее можно почерпнуть из УК («никто не может быть лишен жизни» и куча статей УК — от «убийства» до «причинения смерти по неосторожности»). Законодательство оказывается типичной «базой знаний» — только изложенной не на Prolog, а на естественном языке.
Такие же базы знаний — это внутренности, например, DLP-систем и вообще — близких к ним «по духу» систем информационной безопасности. Что-то построено на основе регулярных выражений, где-то используются хитрые Domain-Specific Languages — но общая «парадигма программирования» тут оказывается «логической». Оказывается, что написанные в виде «правовых норм» документы переводятся в машинно-читаемый вид в виде системы неких правил — и это очень близко к «логическому программированию» в его чистом рафинированном виде.