Что означает точка с запятой, точка или точка (.) В 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 "оператор периода Хаскеля"

Это состав функции: ссылка

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

Другие вопросы по тегам