Мне действительно жаль, что Google не был лучше в поиске синтаксиса:
decades :: (RealFrac a) => a -> a -> [a] -> Array Int Int
decades a b = hist (0,9) . map decade
where decade x = floor ((x - a) * s)
s = 10 / (b - a)
f (g (x))
равно
в математике: f ∘ g
(x)
в haskell: (например, g)
(x)
«Период является оператором композиции функций. В общих чертах, где f и g - функции, (f. G) x означает то же, что и f ( gx).Другими словами, период используется для получения результата от функции справа, передачи его в качестве параметра функции слева и возврата новой функции, представляющей это вычисление »
Источник: Поиск в Google 'haskell period operator'
Это означает композицию функций. См. этот вопрос.
Обратите внимание, что f.g.h x
не эквивалентен (f.g.h) x
, потому что он интерпретируется как f.g.(h x)
, который не будет проверять тип, если (h x) не возвращает функцию.
Вот где может пригодиться оператор $: f.g.h $ x
превращает x из параметра для h
в параметр для всего выражения. Таким образом, оно становится эквивалентным f(g(h x))
, и труба снова работает.
Состав функции (страница довольно длинная, используйте поиск)
.
- функция более высокого порядка для композиции функций.
Prelude> :type (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Prelude> (*2) . (+1) $ 1
4
Prelude> ((*2) . (+1)) 1
4