Главная » Haskell » Prelude: Операторы

0

Операторы — это простые функции одного или двух аргументов. Бинарные (двухместные) операторы обычно ставятся между своих аргументов (инфиксная нотация), вместо того, чтобы ставиться  слева, как это принято для функций. Многие операторы имеют символьное обозначение (например,  (+)) для оператора сложения), однако можно писать и полные имена (для сложения — plus). Другие операторы имеют только текстовые названия (такие как div  для осуществления целочисленного деления).

Таблица  6.1  перечисляет некоторые полезные операторы,   определенные в стандартном модуле Prelude. Значения ассоциативности и приоритета для этих операторов также указаны в таблице.

Чем выше значение приоритета, тем сильнее оператор связан с аргументом, то есть тем раньше он выполняется в выражении. Применение функций имеет приоритет 10 и не уступает в этом вопросе ни одному оператору.

Ассоциативность  — это последовательность применения операторов в выражении, определённая в языке Haskell для удобства создания функций. Без определения ассоциативности  некоторые выражения могут быть двусмысленными. Например, выражение «8 2 1» можно интерпретировать двумя способами, каждый из который даст свой результат: «(8  2)  1» или «8 (2   1)». Ассоциативность  определяет способ восстановления скобок в выражении, если они пропущены. Например, оператор вычитания  имеет левую ассоциативность, поэтому транслятор языка Haskell выбирает первый способ интерпретации.

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

операторы не являются ассоциативными и, как следствие, не могут  быть применены в последовательности. Например, оператор  равенства  (==) не является ассоциативным, и поэтому следующее выражение не разрешено в языке Haskell:

«2 == (1  + 1)  == (3  1)».

Таблица 6.1.  Операторы, определённые в стандартном модуле Prelude

Символ

Значение

Тип

Ас.

Пр.

!!

Индекс

[a] ->  Int ->  a

Л

9

.

Композиция

(a  ->  b)  ->  (c ->  a)  ->  c  ->  b

П

9

?

Экспонента

(Integral b, Num  a)  => a ->  b->  a

П

8

??

Экспонента

(Fractional a, Integral b)  =>  a  ->  b ->  a

П

8

**

Экспонента

Floating a => a ->  a ->  a

П

8

*

Умножение

Num  a => a ->  a ->  a

Л

7

/

Деление

Rational a => a ->  a ->  a

Л

7

quot

Целое деление

Num  a => a ->  a ->  a

Л

7

rem

Остаток

Num  a => a ->  a ->  a

Л

7

div

Целое деление

Num  a => a ->  a ->  a

Л

7

mod

Остаток

Num  a => a ->  a ->  a

Л

7

:%

Дробь

Integral a => a ->  a ->  Ratio  a

Л

7

%

Сокращение

Integral a => a ->  a ->  Ratio  a

Л

7

+

Сложение

Num  a => a ->  a ->  a

Л

6

-

Вычитание

Num  a => a ->  a ->  a

Л

6

:

Создание списка

a ->  [a] ->  [a]

П

5

++

Конкатенация

[a] ->  [a] ->  [a]

П

5

/=

Неравенство

Eq a => a ->  a ->  Bool

4

==

Равенство

Eq a => a ->  a ->  Bool

4

Меньше

Ord a => a ->  a ->  Bool

4

<=

Меньше или равно

Ord a => a ->  a ->  Bool

4

Больше

Ord a => a ->  a ->  Bool

4

>=

Больше или равно

Ord a => a ->  a ->  Bool

4

elem

Существование

Eq a => a ->  [a] ->  Bool

4

notElem

Несуществование

Eq a => a ->  [a] ->  Bool

4

&&

Логическое  И

Bool  ->  Bool  ->  Bool

П

3

||

Логическое  ИЛИ

Bool  ->  Bool  ->  Bool

П

2

>> 

Связывание

m   a ->  m   b ->  m   b

Л

1

>>=

Связывание

m   a ->  (a  ->  m   b)  ->  m   b

Л

1

=<<

Связывание

Monad  m   => (a  ->  m   b)  ->  m   a  ->  m   b

П

1

$

Стр. композиция

(a  ->  b)  ->  a ->  b

П

0

$!

Строгость

(a  ->  b)  ->  a ->  b

П

0

seq

Строгость

a ->  b ->  b

П

0

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии