На этом шаге мы рассмотрим особенности использования операций.
В языке Haskell в основном используется инфиксная запись бинарных операций.
Пусть Σ - алфавит, θ - это множество букв, обозначающих бинарные операции, Γ ⇔ {(,)}.
1+2, (1-5)+34, 55/((45+23)*4).
Если имя операции является последовательностью букв (текстовым обозначением), то оно заключается в обратные кавычки (``) (например, `rem`, `mod`, `div`) и используется по-прежнему инфиксным образом, т.е.
34 `rem` 5.
В языке Haskell возможно также использование префиксной записи бинарных операций: например,
rem 34 5.
Наконец, разрешается использование секционирования.
Операции обладают приоритетом и ассоциативностью.
По приоритету (силе "связывания") операции делятся на десять групп, в соответствии с уровнем приоритета от 0 до 9 включительно (уровень 0 "связывает" операнды наименее сильно, а уровень 9 - наиболее сильно).
Наивысшим приоритетом обладает операция применения функции.
По способу ассоциативности операции делятся на три вида:
(8-2)-1=5 (правильное использование ассоциативности операции -); 8-(2-1)=7 (ошибочное использование ассоциативности операции -); 2==(1+1)==(3-1) (ошибочное использование неассоциативной операции).
Приведём таблицу приоритетов операций, определённых в библиотеке Prelude, вместе с типом ассоциативности:
Приоритет | Левоассоциативные операции | Неассоциативные операции | Правоассоциативные операции |
---|---|---|---|
9 | !! | . | |
8 | ^, ^^, ** | ||
7 | *, /, `div`, `quot`, `mod`, `rem`, :%, % | ||
6 | +, - | ||
5 | :, ++ | ||
4 | ==, /=, <, <=, >, >=, `elem`, `notElem` | ||
3 | && | ||
2 | || | ||
1 | >>, >>= | =<< | |
0 | $, $!, `seq` |
1. Prelude> 2^4 2. Prelude> 2.3**1.2 16 :: Integer 2.7169 :: Double 3. Prelude> 2.4^5 79.6262 :: Double
На следующем шаге мы рассмотрим комментарии.