Tid*_*ddo 7 haskell function-composition
如果我们有两个功能,f
并且g
,然后在Haskell h = f . g
相当于h x = f(g x)
.即功能从右到左应用于输入.有什么根本原因可以从右到左,而不是从左到右?也就是说他们为什么不h = f . g
相同h x = g(f x)
呢?
编辑:正如其他人指出我的等效功能错误的方式,所以我修复了那些.
Eri*_*lun 14
首先,你的[原始的,未经编辑的]问题存在错误:
h = f.g相当于hx = g(fx)
- 那不是真的:h = f . g
相当于h x = f (g x)
.
然而,至于为什么它是这样而不是相反的方式,它很可能是因为它是如何工作的并且在数学方面起作用; 见http://en.wikipedia.org/wiki/Function_composition:
[...] 复合函数被表示为克∘F:X→Z ,由下式定义(克∘F)(X)= G(F(X))的所有X中X.
由于平等,它也很直观(f . g) x == f (g x)
- 正如你所看到的,双方的顺序f
和g
相同.
此外,如果您因为可读性而需要运营商,那么创建自己的"逆向组合"运算符是微不足道的:
(.>) = flip (.)
Run Code Online (Sandbox Code Playgroud)
以便
Prelude> ((+1) .> (*2)) 3
8
Prelude> ((+1) . (*2)) 3
7
Run Code Online (Sandbox Code Playgroud)
事实上,你可以只使用Control.Arrow.(>>>)
哪个功能相同,但更通用,也适用于其他事情:
Prelude Control.Arrow> ((+1) >>> (*2)) 3
8
Run Code Online (Sandbox Code Playgroud)