Шаг 44.
Основы языка Haskell.
Основные функции библиотеки Prelude. Операция композиции функций

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

    Математическая нотация вызова функции традиционна полагала заключение входных параметров функции в круглые скобки - (). Эту традицию переняли практически все языки императивного программирования. Однако в языках функционального программирования принята иная нотация: имя функции отделяется от её параметров просто пробелом, и сами аргументы также отделяются друг от друга пробелами.

    Операция (оператор) композиции функций  перешла в язык Haskell из математики, где композиция функций определяется как применение первой функции к результату, который был возвращён в результате вычисления значения второй функции.

    Операция (оператор) композиции функций (.) определяется так:

   (.):: (b -> c) -> (a -> b) -> a -> c
   (f . g) x = f (g x)

    Операцию композиции можно выразить с помощью операции аппликации.


Примеры вычислений с помощью операций аппликации и композиции.
   Prelude> (sin . cos) 4     Prelude> sin $ cos 4
   -0.608083                  -0.608083

    В качестве иллюстрации использования данной операции приведем примеры из предыдущкго шага:

   -- Демонстрация работы с функциями модуля Prelude (2001)
   -- с использованием:
   --  (1) операции аппликации f x;
   --  (2) операции нестрогой аппликации функции ($);
   --------------------------------------------------
   --  (3) операции композиции функций f(g(h(x)));
   --  (4) операции композиции функций (.);
   --  (5) операции композиции функций в бесточечном стиле
   -- ****************************************************
   x  = pi/2
   f1 = sin x
   f2 = asin $ sin $ acos $ cos x
   ------------------------------
   f3 = asin (sin (acos (cos x)))
   f4 = (log.exp) 10             -- Инфиксная форма записи  (.)
   f5 = (asin.sin.acos.cos) x    -- Инфиксная форма записи  (.)
   f6 = (.) asin sin x           -- Префиксная форма записи (.)
   ------------------------------------------------------------
   f7 = (.) ((.) ((.) asin sin) acos) cos x
Файл с примерами можно взять здесь.

    На следующем шаге мы рассмотрим определение функций с помощью замыкания.




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