7.5.3. Продукционные правила и процедуры. Примеры
Два следующих примера иллюстрируют общий принцип работы продукционных систем, причем в неблагоприятных случаях, когда процедуры являются итерационными. Эти примеры являются классическими и показывают, что всегда можно, не вводя дополнительных переменных, четко разделить операции в элементарных модулях, выраженных в форме условных правил. Во втором примере, где в отличие от первого все сделано
для полного разделения правил и их управляющей структуры, мы приведем хорошо известное свойство продукционных систем.
Пример 1. Инверсия цепочки символов с помощью алгоритма Маркова.
Символы являются управляющими и не могут замещаться. х и у могут унифицироваться с любой непустой цепочкой символов. Список правил упорядочен сверху вниз. Правило которое определяет пустое действие, отмечает конец процедуры.
Инверсия цепочки символов слова для предыдущей системы Маркова:
При выполнении этой процедуры берутся последовательно все символы цепочки и помещаются слева от уже инвертированных, а затем удаляются управляющие символы.
Пример 2. Имеются три следующих правила, в которых через и обозначены произвольные последовательности точек, возможно пустые [Post, 1936]:
Символ является незамещаемой константой. Входная последовательность имеет вид
Эти три правила выполняют умножение двух целых чисел представленных в единичной системе. В данном случае правила унифицированы с входной последовательностью в произвольном порядке. Кроме того, они рассматриваются как продукционные, и унификация должна производиться с их левыми частями (разд. 7.3.4). Таким образом, если входная последовательность имеет вид то последовательно получим
Замечание. С момента появления информатики мы привыкли мыслить в терминах процедур, а не в терминах перезаписи. Поэтому не удивительно и заранее ясно, что продукционные системы для нас в некотором роде чужеродны. Но как вы думаете, не напоминает ли приведенный выше пример манеру счета маленьких детей?
В обоих приведенных примерах механизм вычислений представляется громоздким. Более предпочтительным был бы формализм языков программирования, так как эти ситуации являются явно алгоритмическими. В отличие от этого формализм продукционных правил, представляющий собой множество неупорядоченной информации, обладает преимуществом, которое заключается в повествовательном типе формулировок, независимых одна от другой, как в случаях утверждения наблюдаемых фактов или правил решения математических теорем, грамматических правил, постановки медицинского диагноза, химических исследований, разработке фюзеляжей самолетов, электронных схем (разд. 7.2). И не исключено, что после определенного числа попыток будет сформирован пакет правил и оформлен в виде законченной процедуры.