在Haskell中,句号或圆点(.)是什么意思?

在Haskell中,句号或圆点(.)是什么意思?,haskell,syntax,operators,function-composition,Haskell,Syntax,Operators,Function Composition,我真希望谷歌能更好地搜索语法: 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) 它是一个函数合

我真希望谷歌能更好地搜索语法:

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)

它是一个函数合成:

它的意思是函数合成。 看

另请注意,
f.g.hx
并不等同于
(f.g.h)x
,因为它被解释为
f.g.(hx)
,除非(hx)返回一个函数,否则不会进行打字检查

这就是$运算符可以派上用场的地方:
f.g.h$x
将x从参数变为整个表达式的参数。因此它变得相当于f(g(hx)),管道再次工作

“句点是一个函数合成运算符。一般来说,其中f和g是函数,(f.g)x表示与f(gx)相同。换句话说,句点用于从右侧函数获取结果,将其作为参数提供给左侧函数,并返回表示此计算的新函数。”


来源:

(页面很长,请使用搜索)

是用于函数组合的高阶函数

Prelude> :type (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Prelude> (*2) . (+1) $ 1
4
Prelude> ((*2) . (+1)) 1
4
f(g(x))

在数学方面:
f∘ g
(x)


在haskell中:
(f.g)
(x)

句点也可以是名称空间分隔符(例如
Data.Vector.unbox.length
)。要搜索关于haskell代码的信息,我衷心推荐Hoogle(),一个类型搜索引擎(例如,搜索
(A->b)->[A]->[b]
会出现
地图
)和函数/运算符名称(因此搜索
map
会出现
map
,搜索
会出现前奏函数合成运算符
)。还有Hayoo!(),它不太强调类型,但索引了更多的包。可能的重复只需记住函数应用程序运算符(空格)具有最高优先级。一段时间后,一切都会有意义。更适合作为评论。