С системами, управляемыми образцами, связан свой особый стиль программирования, требующий специфического программистского мышления. Мы говорим в этом случае о программировании в терминах образцов.
В качестве иллюстрации, рассмотрим элементарное упражнение по программированию - вычисление наибольшего общего делителя D
двух целых чисел А и В. Рассмотрим классический алгоритм Евклида:
line();
Для того, чтобы вычислить наибольший общий делитель D чисел А и В, необходимо:
Повторять циклически, пока А и В не совпадут:
если А > В, то заменить А на А - В, иначе заменить В на В - А.
После выхода из цикла А и В совпадают; наибольший общий делитель D равен
А (или В).
line();
Тот же самый процесс можно описать при помощи двух модулей, управляемых образцами:
Модуль 1
Условие
В базе данных существуют такие два числа X и Y, что X > Y.
Действие Заменить X на разность X - Y.
Модуль 2
Условие
В базе данных имеется число X.
Действие Выдать результат X и остановиться.
Очевидно, что всегда, когда условие Модуля 1 удовлетворяется, удовлетворяется также и условие Модуля 2, и мы имеем конфликт. В нашем случае конфликт можно разрешить при помощи простого управляющего правила: всегда отдавать предпочтение Модулю 1. База данных первоначально содержит числа А и В.