2.6. ЗНАЧЕНИЯ ПЕРЕМЕННЫХ И СРЕДЫ

Вычисление любой конструкции Рефала Плюс требует знания значений переменных, входящих в эту конструкцию. Эта информация о значениях переменных естественным образом представляется в виде функции с конечной областью определения, ставящей в соответствие каждой переменной из ее области определения значение этой переменной.

А именно, пусть Env - среда с областью определения {V1, ..., Vn}. Тогда Env(Vj) = Oej является значением переменной Vj. Такую среду мы будем обозначать через

{V1 = Oe1, ..., Vn = Oen}.

В частности, пустая среда будет обозначаться через {}.

Область определения среды Env мы будем обозначать через dom[Env]. Таким образом,

dom[ {V1 = Oe1, ..., Vn = Oen} ] = {V1, ..., Vn}.

При этом, без дальнейших оговорок, мы всегда будем предполагать, что переменные обязательно имеют значения, соответствующие их типам. Т.е. значениями s-переменных могут быть только символы, значениями t-переменных - только объектные термы, значениями e-переменных - произвольные объектные выражения, а значениями v-переменных - непустые объектные выражения.

В дальнейшем Env+Env' будет означать пополнение среды Env значениями переменных из среды Env', которое строится следующим образом.

dom[Env+Env'] содержит все переменные из dom[Env'], а также все переменные из dom[Env], индексы которых отличаются от индексов переменных из dom[Env'].

Для любой переменной V из dom[Env+Env'], если Env'(V) определено, то

(Env+Env')(V) = Env'(V),

а если Env'(V) не определено, то

(Env+Env')(V) = Env(V).

 

Например,

{sX = 1, sY = 2} + {sY = 200, sZ = 300}

= {sX = 1, sY = 200, sZ = 300}

{sX = 1, sY = 2} + {eY = 200, sZ = 300}

= {sX = 1, eY = 200, sZ = 300}