管道,组成和卷曲

问题描述:

在我看来,所有这些都是相关的。有什么不同?管道,组成和卷曲

+5

您是否有任何需要找到适当方法的示例?你的问题很广泛。 – pad 2012-04-10 15:11:22

+2

这可能适合更多的“程序员”SO网站。 – 2012-04-10 15:19:52

+0

我同意帕德 - 这是一个相当开放的问题(托马斯和丹尼尔的答案没有抵挡)。 – 2012-04-11 13:13:48

  • 管道是用来执行某些值的操作序列(就像Unix中的管道)。每个函数的输入都是前一个函数的输出。显然这需要每个函数都采用一个参数。

  • 组成(<</>>)是它调用在序列中的两个功能的类似(即,第一输出是输入到第二),但它不是立即返回调用序列的函数。

  • 柯里通过施加1到Ñ -1参数传递给的Ñ ARGS

因此,一个函数创建一个新的功能,组合物和钻营用于创建函数而被用于管道调用。创作和咖啡因在创建新功能(通过应用参数与链接)方面有所不同。

除了什么丹尼尔写道,有管道(在|><|运营商)和功能组成(>><<运营商)之间的非常密切的对应关系。

当使用管道的一些数据传递到的功能的seqence:

nums |> Seq.filter isOdd 
    |> Seq.map square 
    |> Seq.sum 

...那么这相当于使输入到函数获得使用函数组合:

let composed = 
    Seq.filter isOdd 
    >> Seq.map square 
    >> Seq.sum 

composed nums 

在实践中,这通常意味着你可以用函数组合来替换使用参数上的管道的函数声明(并使用函数可以用作值的事实)。以下是一个示例:

// Explicit function declaration 
foo (fun x -> x |> bar |> goo) 

// Equivalent using function composition 
foo (bar >> goo)