Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
35
Добавлен:
11.04.2015
Размер:
849.92 Кб
Скачать

6.23.1. Локальные выражения (Local Expressions)

Синтаксис.

local_expr ::=

local opt-decl-string in value_expr end

Контекст и правила видимости. Контекстом объявленияopt-decl-stringявляется само это объявлениеopt-decl-stringи выражениеvalue_expr. Это означает, что порядок определений в объявленииopt-decl-stringнесущественен.

Контекстные условия. Входящие в локальное выражение объявленияdeclдолжны быть совместимы.

Максимальный тип выражения value_exprне должен включать в себя абстрактные типы, переменные и каналы, определенные в объявленияхdecl.

Атрибуты. Максимальным типом локального выраженияlocal_exprявляется максимальный тип содержащегося в нем выраженияvalue_expr.

Локальное выражение local_exprстатически производит доступ к тем нелокальным переменным и каналам (т.е. к переменным и каналам, не определяемым в объявленииopt-decl-string), к которым статически обращается входящее в его состав выражениеvalue_expr.

Семантика. Результирующим воздействием локального выраженияlocal_exprявляется результирующее воздействие содержащегося в нем выраженияvalue_expr, вычисленного в контексте определений, заданных в объявленияхdecl. Данное выражениеvalue_exprвычисляется в каждой модели, удовлетворяющей указанным определениям, и затем производится недетерминированный выбор между результирующими воздействиями этих вычислений.

В конце вычисления выражения value_exprлюбое ожидающее обработки взаимодействие по каналу, объявленному в объявленииopt-decl-string, замещается наstop.

6.23.2. Let-выражения (Let Expressions)

Синтаксис.

let_expr ::=

let let_def-list in value_expr end

let_def ::=

typing ½

explicit_let ½

implicit_let

explicit_let ::=

let_binding = value_expr

implicit_let ::=

single_typing restriction

let_binding ::=

binding ½

record_pattern ½

list_pattern

Контекстно-независимые расширения. Выражениеlet_expr, содержащее в себе более одного определенияlet_def, является сокращенной формой записи для некоторого числа вложенныхlet-выражений с единственным определением. То есть выражение let_expr вида:

let let_def1, …, let_defn in value_expr end

является сокращенной формой записи следующего выражения:

let let_def1 in

let let_defn in value_expr end

end

Контекст и правила видимости. В выраженииlet_exprвида:

let let_def in value_expr end

контекстом определения let_defявляется выражениеvalue_expr.

Атрибуты. Максимальным типом выраженияlet_exprявляется максимальный тип содержащегося в нем выраженияvalue_expr.

В явном определении explicit_letмаксимальным контекстным типом конструкцииlet_bindingявляется максимальный тип выраженияvalue_expr.

Выражение let_exprстатически производит доступ к тем переменным и каналам, к которым статически обращаются входящие в его состав определенияlet_defи выражениеvalue_expr.

Указание типа typing не обращается статически ни к каким переменным или каналам.

Явное определение explicit_letстатически производит доступ к тем переменным и каналам, к которым статически обращается входящее в его состав выражениеvalue_expr.

Неявное определение implicit_letстатически производит доступ к тем переменным и каналам, к которым статически обращается входящее в его состав ограничениеrestriction.

Семантика. Выражениеlet_expr, содержащее одно определениеlet_defи имеющее вид:

let let_def in value_expr end

вычисляется следующим образом. Определение let_defпредставляет некоторое множество моделей, как описано ниже. Указанное выражениеvalue_exprвычисляется в каждой такой модели и между результирующими эффектами этих вычислений производится недетерминированный выбор.

Различаются три вида определений let_def:

  • определение let_defв форме указания типаtypingпредставляет множество моделей, которые удовлетворяют определениям, заданных указанием типаtyping;

  • определение let_defв неявной формеimplicit_letпредставляет некоторое подмножество моделей, которые удовлетворяют определениям, заданных указанием типаsingle_typing: тех из них, где выполняется ограничениеrestriction;

  • определение let_defв явной формеexplicit_letпредставляет множество моделей, получаемое следующим образом. Выражениеvalue_exprвычисляется, и затем возвращаемое им значение сопоставляется со связываниемlet_binding. Если данное значение соответствует связываниюlet_binding, результатом является некоторый набор определений и искомое множество моделей содержит единственную модель, удовлетворяющую этим определениям. Если же, напротив, данное значение не соответствует связываниюlet_binding, то искомое множество моделей пусто.

Соседние файлы в папке ТРПО