Что означает точка с запятой, точка или точка (.) В Haskell? - PullRequest
21 голосов
/ 21 марта 2010

Мне бы очень хотелось, чтобы 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)

Ответы [ 6 ]

45 голосов
/ 21 марта 2010

f(g(x))

- это

в математике: f ∘ g (x)

в haskell: ( f . g ) (x)

16 голосов
/ 21 марта 2010

Это означает состав функции. См. этот вопрос .

Обратите внимание, что f.g.h x не эквивалентно (f.g.h) x, потому что оно интерпретируется как f.g.(h x), которое не проверяет тип, если (h x) не возвращает функцию.

Здесь оператор $ может пригодиться: f.g.h $ x превращает x из параметра в h в параметр всего выражения. И поэтому он становится эквивалентным f(g(h x)), и труба снова работает.

12 голосов
/ 21 марта 2010

. - функция высшего порядка для композиции функций.

Prelude> :type (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Prelude> (*2) . (+1) $ 1
4
Prelude> ((*2) . (+1)) 1
4
3 голосов
/ 21 марта 2010

"Период является оператором композиции функций. В общих чертах, где f и g являются функциями, (f. G) x означает то же самое, что и f (gx). Другими словами, период используется для получения результата. из функции справа, передайте ее как параметр функции слева и верните новую функцию, которая представляет это вычисление. "

Источник: Поиск в Google 'Оператор периода Хаскеля'

2 голосов
/ 21 марта 2010

Это функциональная композиция: ссылка

1 голос
/ 21 марта 2010

Состав функции (страница довольно длинная, используйте поиск)

...