Шаг 17.
Основы языка Haskell. Основные типы данных, операции, способы определения функций. Операции

    На этом шаге мы рассмотрим особенности использования операций.

Определение.
Операциями (в программировании) называются функции одного или двух аргументов.

    В языке Haskell в основном используется инфиксная запись бинарных операций.

    Пусть  Σ - алфавит,  θ - это множество букв, обозначающих бинарные операции,  Γ ⇔ {(,)}.

Определение.
Инфиксная форма записи - это цепочка в алфавите Σ∪θ∪Γ, обладающая следующей индуктивно заданной структурой:
(1) если x∈Σ, то x является инфиксной формой записи;
(2) если A и B - инфиксные цепочки и  ρ∈θ, то (AρB) является инфиксной формой записи;
(3) никакие другие цепочки не являются инфиксными формами записи.

Примеры инфиксной формы записи операций.
   1+2, (1-5)+34, 55/((45+23)*4).

    Если имя операции является последовательностью букв (текстовым обозначением), то оно заключается в обратные кавычки (``) (например, `rem`, `mod`, `div`) и используется по-прежнему инфиксным образом, т.е.

   34 `rem` 5.

    В языке Haskell возможно также использование префиксной записи бинарных операций: например,

   rem 34 5.

    Наконец, разрешается использование секционирования.

Определение.
Секционированием называется преобразование записи применения инфиксной функции в виде x `f` y в префиксную запись применения (f) x y.

    Операции обладают приоритетом и ассоциативностью.

Определение.
Приоритетом операции называется номер операции в очереди операций, используемых при вычислении значения некоторого выражения; чем больший номер имеет операция, тем быстрее она будет выполнена.

Пример использования приоритета. Выражение 3-4*2 интерпретируется как 3-(4*2), т.к. операция * имеет более высокий приоритет, чем операция -.

    По приоритету (силе "связывания") операции делятся на  десять групп, в соответствии с уровнем приоритета от 0 до 9 включительно (уровень 0 "связывает" операнды наименее сильно, а уровень 9 - наиболее сильно).

    Наивысшим приоритетом обладает операция применения функции.

Определение.
Ассоциативностью (в программировании) называется последовательность применения одинаковых операций в выражении. Ассоциативность определяет однозначный способ восстановления отсутствующих скобок в выражении.

    По способу ассоциативности операции делятся на три вида:

Применение неассоциативных операций несколько раз в выражении может привести к ошибке.
Пример [1, с.587].
   (8-2)-1=5 (правильное использование ассоциативности операции -);

   8-(2-1)=7 (ошибочное использование ассоциативности операции -);

   2==(1+1)==(3-1)
             (ошибочное использование неассоциативной операции).

    Приведём  таблицу приоритетов операций, определённых в библиотеке Prelude, вместе с типом ассоциативности:

Таблица 1. Таблица приоритетов операций
Приоритет Левоассоциативные операции Неассоциативные операции Правоассоциативные операции
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

(1)Душкин Р.В. Функциональное программирование на языке Haskell. - М.: ДМК Пресс, 2007. - 608 с.

    На следующем шаге мы рассмотрим комментарии.




Предыдущий шаг Содержание Следующий шаг