[Haskell] .

函数“.”称为function composition,定义如下:

(.) :: (b -> c) -> (a -> b) -> a -> c
f . g = \x -> f (g x)

我们看到,函数f接受函数g的返回值作为参数。
函数复合以后返回一个函数f . g,它的类型为a -> cag的入参类型,cf的返回值类型。

例如:
negate . (* 3)返回一个函数,这个函数接受一个数字作为参数,乘以3然后取反。

函数复合的一种应用是动态创建一个复合函数,传递给其他高阶函数。虽然我们总是可以使用lambda来实现它,但是函数复合通常会更清晰简洁。
例如:

ghci> map (\x -> negate (abs x)) [5, -3, -6, 7]
[-5, -3, -6, -7]

因为\x -> negate (abs x) = negate . abs,所以,我们可以改写为:

ghci> map (negate . abs) [5, -3, -6, 7]
[-5, -3, -6, -7]

函数复合是右结合的,所以我们可以一次复合多个函数。

f (g (z x)) = (f . g . z) x

注:
使用函数“$”,还可以改写:

f (g x) = f $ g x = f $ g $ x
(f . g . z) x = f . g . z $ x

你可能感兴趣的:([Haskell] .)