Haskell中的fullstop或句点或点(.)是什么意思?

Cas*_*ash 21 syntax haskell operators function-composition

我真的希望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)
Run Code Online (Sandbox Code Playgroud)

Pra*_*are 45

f(g(x))

在数学中: f ? g (x)

在haskell: ( f . g ) (x)


Ale*_*ter 16

它意味着功能组合.看到这个问题.

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

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

  • 您只需要记住函数应用程序操作符(空格)具有最高优先级.一段时间后,这一切都有意义. (5认同)

ret*_*nym 12

. 是函数组合的高阶函数.

Prelude> :type (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Prelude> (*2) . (+1) $ 1
4
Prelude> ((*2) . (+1)) 1
4
Run Code Online (Sandbox Code Playgroud)


Ala*_*lan 6

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