Модуль 2. • Условие. В базе данных есть число X

• Условие. В базе данных есть число X.

• Действие. Вывести X на внешнее устройство и остановиться.

Каждый раз, когда выполняется условие модуля 1, выполняется и условие моду­ля 2, поэтому возникает конфликт. Этот конфликт разрешается с помощью простого правила управления: модуль 1 всегда имеет более высокий приоритет, чем модуль 2. Первоначально база данных содержит два разных числа, А и В, а после завершения работы — только одинаковые числа.

Приятным сюрпризом является то, что рассматриваемая программа, управляе­мая шаблонами, фактически решает более общую задачу - вычисление наиболь­шего общего делителя для любого множества целых чисел. Если в базе данных хранится несколько целых чисел, система выводит наибольший общий делитель для всех них. На рис. 23.4 показана возможная последовательность изменений в базе данных, прежде чем будет получен результат, при том условии, что база дан­ных первоначально содержит четыре числа: 25, 10, 15, 30. Обратите внимание на то, что предварительное условие модуля может быть удовлетворено в нескольких местах базы данных.

В данной главе рассматривается интерпретатор для простого языка определения систем, управляемых шаблонами, и на реальных примерах иллюстрируется одно из направлений программирования, управляемого шаблонами.


Глааа 23. Метзпрограммирование




 


Рис. 23.4. Возможные варианты хода выпол­нения программы, управляемой шаблонами. при вычислении наибольшего общего делит.е-ля для нескольких целых чисел. В этом при­мере база данных первоначально содержит числа 25. 10, 15 и 30; стрелки, направленные вниз, соединяют исходные числа с теми чис­лами, которые их заменяют. В окончатель­ном виде база данных имеет следующее со­стояние: 5, 5, 5, 5