Модуль 2.
• Условие. В базе данных есть число X.
• Действие. Вывести X на внешнее устройство и остановиться.
Каждый раз, когда выполняется условие модуля 1, выполняется и условие модуля 2, поэтому возникает конфликт. Этот конфликт разрешается с помощью простого правила управления: модуль 1 всегда имеет более высокий приоритет, чем модуль 2. Первоначально база данных содержит два разных числа, А и В, а после завершения работы — только одинаковые числа.
Приятным сюрпризом является то, что рассматриваемая программа, управляемая шаблонами, фактически решает более общую задачу - вычисление наибольшего общего делителя для любого множества целых чисел. Если в базе данных хранится несколько целых чисел, система выводит наибольший общий делитель для всех них. На рис. 23.4 показана возможная последовательность изменений в базе данных, прежде чем будет получен результат, при том условии, что база данных первоначально содержит четыре числа: 25, 10, 15, 30. Обратите внимание на то, что предварительное условие модуля может быть удовлетворено в нескольких местах базы данных.
В данной главе рассматривается интерпретатор для простого языка определения систем, управляемых шаблонами, и на реальных примерах иллюстрируется одно из направлений программирования, управляемого шаблонами.
Глааа 23. Метзпрограммирование
Рис. 23.4. Возможные варианты хода выполнения программы, управляемой шаблонами. при вычислении наибольшего общего делит.е-ля для нескольких целых чисел. В этом примере база данных первоначально содержит числа 25. 10, 15 и 30; стрелки, направленные вниз, соединяют исходные числа с теми числами, которые их заменяют. В окончательном виде база данных имеет следующее состояние: 5, 5, 5, 5