Выражения
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 Кортежи
Перевод:
выражение-аргумента | -> | ( выражение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 Единичные выражения и выражения в скобках
Перевод:
Выражение вида (e) представляет собой просто выражение в скобках и эквивалентно e. Единичное выражение () имеет тип () (см. раздел "4.1.2" ). Этот единственный член указанного типа, отличный от _|_, может рассматриваться как "кортеж нулевого размера" (см. раздел "6.1.5" ).
Трансляция:
(e) эквивалентно e