2010-03-21 1 views
19

Я действительно хочу, чтобы Google был лучше на поиск синтаксиса:Что означает fullstop, или период или точка (.) В Haskell?

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) 
+2

Период также может быть разделитель пространства имен (например, 'Data.Vector.Unboxed .length'). – kennytm

+7

Для поиска информации о коде Haskell я от всей души рекомендую Hoogle (http://www.haskell.org/hoogle/), поисковую систему для типов (например, поиск '(a -> b) -> [a] - > [b] 'включает' map') и имена функций/операторов (поэтому поиск 'map' включает' map', а поиск '.' вызывает оператор композиции функции Prelude' (.) '). Там также Hayoo! (http://holumbus.fh-wedel.de/hayoo/hayoo.html), в котором меньше внимания уделяется типам, но индексируется больше пакетов. –

+1

Возможный дубликат [Dot Operator in Haskell: требуется больше объяснений] (http://stackoverflow.com/questions/631284/dot-operator-in-haskell-need-more-explanation) –

ответ

46

f(g(x))

является

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

в Haskell: (f . g)(x)

16

Это означает, что функция состава. См. this question.

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

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

+5

Вам просто нужно помнить, что функция оператор приложения (пробел) имеет наивысший приоритет. Через некоторое время все это будет иметь смысл. –

3

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

Источник: Google search 'haskell period operator'

1

Function composition (страница довольно долго, воспользуйтесь поиском)

+1

Посмотрите это дополнение: https://addons.mozilla.org/en-US/firefox/addon/416 – Casebash

+0

Лучше подходит как комментарий. – Sid

12

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

Prelude> :type (.) 
(.) :: (b -> c) -> (a -> b) -> a -> c 
Prelude> (*2) . (+1) $ 1 
4 
Prelude> ((*2) . (+1)) 1 
4 
Смежные вопросы