Что означает точка с запятой, точка или точка (.) В Haskell?
Я действительно хотел бы, чтобы 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 ответов
f(g(x))
является
по математике: f ∘ g
(x)
в хаскеле: ( f . g )
(x)
Это означает состав функции. Смотрите этот вопрос.
Обратите внимание также на f.g.h x
не эквивалентно (f.g.h) x
потому что это интерпретируется как f.g.(h x)
которая не проверяет тип, если (h x) не возвращает функцию.
Вот где оператор $ может пригодиться: f.g.h $ x
превращает х из параметра в h
чтобы быть параметром для всего выражения. И поэтому он становится эквивалентным f(g(h x))
и труба снова работает.
.
является функцией более высокого порядка для композиции функций.
Prelude> :type (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Prelude> (*2) . (+1) $ 1
4
Prelude> ((*2) . (+1)) 1
4
"Период является оператором композиции функций. В общих чертах, где f и g являются функциями, (f . G) x означает то же самое, что и f (g x). Другими словами, период используется для получения результата из функции. справа, передать его в качестве параметра функции слева и вернуть новую функцию, которая представляет это вычисление."
Источник: поиск Google "оператор периода Хаскеля"
Композиция функций (страница довольно длинная, используйте поиск)