[Haskell] .

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

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

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

例如:
<u></u>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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容