
272
Глава 3. Модульность, объекты и состояние
m2
m1
p
*
9
w
y
v
C
*
m2
m1
p
+
a1
a2
s
5 32
F
u
Рис. 3.28. Уравнение 9C = 5(F −32), выраженное в виде сети ограничен ий.
может включать и нформацию , что деформация d металлического стержня связана урав-
нением dAE = F L с приложенной к нему силой F , его длиной L, поперечным сечением
A и модулем упругости E. Такое уравнение не является однонаправленным. Имея любые
четыре величины, мы можем вычисл ить пятую. Однако при переводе уравнения на тра-
диционный компьютерный язык нам придется выбрать величин у, которая вычисляется
на основе остальных четырех, так что процедура для вычисления площади A не может
быть использована для вычисления деформации d, хотя вычисление A и d основаны на
одном и том же уравнении
31
.
В этом разделе м ы набросаем эскиз языка, который позволит нам работать в терминах
самих отношени й. Минимальными составляющими этого языка будут служить элемен-
тарные ограничения (primitive constraints), которые говорят, что между величинами
существуют определенные связи. Например , (adder a b c) означает, что величины
a, b и c должны быть связаны уравнением a + b = c, (multiplier x y z) выражает
ограничение xy = z, а (constant 3.14 x) говорит, что значение x обязано равняться
3.14.
Наш язык предо ставляет средства комбинирования элементарных ограничений, чтобы
с их помощью выражать более сложные отношения. Сочетания образуют сети ограниче-
ний (constraint netwo rks), в которых ограничения связаны соединителями (connectors).
Соедините ль — это объект, который «содержит» значение, способное участвовать в од-
ном или нескольких ограничениях. К примеру, мы знаем, что связь между температурами
по Цельсию и по Фаренгейту выглядит как 9C = 5(F − 32) Такое ограничение можно
изобразить в виде сети, состоя щей из элементарных ограничений — сумматора, умно-
жителей и констант (рисунок 3.28). На этом рисунке слева мы видим блок умножителя
с тремя выводами, обозначенными m1, m2 и p. Вывод m1 присоединен к соединителю
C, который будет хранить температуру по Цельсию. Вывод m2 присоединен к соеди-
нителю w, который, кроме того, связан с блоком-константой, содержащим 9. Вывод p,
про который блок-умножитель говорит, что он должен быть произведением m1 и m2,
связан с выводом p другого блока-умножителя, чей вывод m2 связан с константой 5, а
m1 присоединен к одному из слагаемых суммы.
31
Распространение ограничений появилось в системе SKETCHPAD Айвена Сазерленда (Sutherland 1963),
невероятно опередившей свое время. Изящная система распространения ограничений, основанная на языке
Smalltalk, была разработана Аланом Борнингом (Borning 1977) в исследовательском центре компании Xerox
в Пало Альто. Сассман, Столлман и Стил применили распространение ограничений к анализу электрических
цепей (Sussman and Stallman 1975; Su s sman and Steele 1980) . TK!Solver (Konopasek and Jayaraman 1984)
представляет собой богатую среду моделирования, основанную на ограничениях.