Что означает точка или точка (.) В 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)

person Casebash    schedule 21.03.2010    source источник
comment
Точка также может быть разделителем пространства имен (например, Data.Vector.Unboxed.length).   -  person kennytm    schedule 21.03.2010
comment
Для поиска информации о коде Haskell я настоятельно рекомендую Hoogle (haskell.org/hoogle), поисковая машина для типов (например, поиск (a -> b) -> [a] -> [b] показывает map) и имен функций / операторов (поэтому поиск map вызывает map, а поиск . включает оператор композиции Prelude функции (.)). Также есть Хаю! (holumbus.fh-wedel.de/hayoo/hayoo.html), в котором меньше внимания уделяется типам, но индексируется больше пакетов.   -  person Antal Spector-Zabusky    schedule 21.03.2010
comment
возможный дубликат оператора точки в Haskell: требуется дополнительное объяснение   -  person Don Stewart    schedule 19.04.2011


Ответы (6)


f(g(x))

is

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

в haskell: ( f . g ) (x)

person Pratik Deoghare    schedule 21.03.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)), и труба снова работает.

person Alex Jenter    schedule 21.03.2010
comment
Вам просто нужно помнить, что функция-оператор приложения (пробел) имеет наивысший приоритет. Через какое-то время все обретет смысл. - person Alex Jenter; 21.03.2010

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

Prelude> :type (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Prelude> (*2) . (+1) $ 1
4
Prelude> ((*2) . (+1)) 1
4
person retronym    schedule 21.03.2010

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

Источник: "оператор периода haskell" в поиске Google.

person Alan    schedule 21.03.2010

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

person demas    schedule 21.03.2010

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

person Drakosha    schedule 21.03.2010
comment
Лучше подходит в качестве комментария. - person Sid; 28.01.2018