为什么点在Haskell中从右到左构成?

时间:2015-04-26 13:57:35

标签: haskell function-composition

如果我们有两个函数fg,那么在Haskell中h = f . g相当于h x = f(g x)。即功能从右到左应用于输入。有什么根本原因可以从右到左,而不是从左到右?即为什么他们不会h = f . g相当于h x = g(f x)

编辑:正如其他人指出我的等效函数错误的方法,所以我修复了那些。

1 个答案:

答案 0 :(得分:14)

首先,你的[原始未经编辑的]问题存在错误:

  

h = f。 g等于h x = g(f x)

- 事实并非如此:h = f . g相当于h x = f (g x)

然而,至于为什么会这样,而不是相反,这很可能是因为它是如何运作的,并且在数学方面起作用;见http://en.wikipedia.org/wiki/Function_composition

  

[...] 复合函数表示为g∘f:X→Z ,由(g∘f)(x)= g定义(对于 X 中的所有 x ,f(x))

由于平等(f . g) x == f (g x),它也很直观 - 如您所见,fg的顺序在双方都是相同的。

此外,如果你想要一个例子,那么创建你自己的“反向组合”算子是微不足道的。可读性:

(.>) = flip (.)

这样

Prelude> ((+1) .> (*2)) 3
8
Prelude> ((+1) . (*2)) 3
7

事实上,你可以使用Control.Arrow.(>>>)对功能做同样的事情,但更通用,也适用于其他事情:

Prelude Control.Arrow> ((+1) >>> (*2)) 3
8