Опубликован: 19.09.2008 | Доступ: свободный | Студентов: 658 / 70 | Оценка: 4.50 / 5.00 | Длительность: 21:25:00
Лекция 4:

Выражения

3.7 Списки

exp -> exp1 qop exp2
aexp -> [ exp1 , ... , expk ] (k>=1)
| gcon
gcon -> []
| qcon ( gconsym )
qcon ->
qop -> qconop
qconop -> gconsym
gconsym -> :

Перевод:

выражение ->    выражение1 квалифицированный-оператор выражение2
выражение-аргумента -> [ выражение1 , ... , выражениеk ] (k >= 1)
| общий-конструктор
общий-конструктор -> []
| квалифицированный-конструктор
квалифицированный-конструктор -> ( символ-общего-конструктора )
квалифицированный-оператор -> квалифицированный-оператор-конструктора
квалифицированный-оператор-конструктора -> символ-общего-конструктора
символ-общего-конструктора -> :

Списки записываются в виде [e1, ..., ek], где k >= 1. Конструктором списка является :, пустой список обозначается []. Стандартные операции над списками описаны в Prelude (см. раздел "6.1.3" и лекции "8" , особенно раздел "8.1" ).

Трансляция:

Выполняются следующие тождества:

[e1, ..., ek]= e1 : (e2 : ( ... (ek : [])))

где : и [] - конструкторы списков, определенные в Prelude (см. раздел "6.1.3" ). Выражения e1, .... , ek должны быть одного типа (назовем его t ), а типом всего выражения является [t] (см. раздел "4.1.2" ).

Конструктор : предназначен исключительно для построения списка; как и [], он является обоснованной частью синтаксиса языка и не может быть скрыт или переопределен. Он представляет собой правоассоциативный оператор с уровнем приоритета 5 (раздел "4.4.2" ).

3.8 Кортежи

aexp -> ( exp1 , ... , expk ) (k>=2)
| qcon
qcon -> (,{,})

Перевод:

выражение-аргумента -> ( выражение1 , ... , выражениеk ) (k>=2)
| квалифицированный-конструктор
квалифицированный-конструктор -> (,{,})

Кортежи записываются в виде (e1, ..., ek) и могут быть произвольной длины k >= 2. Конструктор для кортежа размера n обозначается (,...,), где n-1 запятых. Таким образом, (a,b,c) и (,,) a b c обозначают одно и то же значение. Стандартные операции над кортежами описаны в Prelude (см. раздел "6.1.4" и лекцию "8" ).

Трансляция:

(e1, ..., ek) для k >= 2 является экземпляром кортежа размера k, в соответствии с определением в Prelude, и не требует трансляции. Если t1, ... , tk - соответственно типы e1, ... , ek, то типом кортежа будет (t1, ..., tk) (см. раздел "4.1.2" ).

3.9 Единичные выражения и выражения в скобках

aexp -> gcon
| ( exp )
gcon -> ()

Перевод:

выражение-аргумента -> общий-конструктор
| ( выражение )
общий-конструктор -> ()

Выражение вида (e) представляет собой просто выражение в скобках и эквивалентно e. Единичное выражение () имеет тип () (см. раздел "4.1.2" ). Этот единственный член указанного типа, отличный от _|_, может рассматриваться как "кортеж нулевого размера" (см. раздел "6.1.5" ).

Трансляция:

(e) эквивалентно e