Dan*_*iel 53
管道用于对某些值执行一系列操作(就像Unix中的管道一样).每个函数的输入是前一个函数的输出.显然这需要每个函数只需一个arg.
组合(<</ >>)的类似之处在于它按顺序调用两个函数(即,第一个的输出是第二个的输入),但它返回一个函数而不是立即调用序列.
Currying通过将1到N -1 args应用于N args 的函数来创建新函数
因此,组合和currying用于创建函数,而管道用于调用.组合和currying在创建新功能的方式上有所不同(通过应用args vs chaining).
Tom*_*cek 33
除了Daniel写的内容之外,管道(|>和<|运算符)和函数组合(>>和<<运算符)之间存在非常密切的对应关系.
当您使用管道将一些数据传递给一系列函数时:
nums |> Seq.filter isOdd
|> Seq.map square
|> Seq.sum
Run Code Online (Sandbox Code Playgroud)
...那么这相当于将输入传递给使用函数组合获得的函数:
let composed =
Seq.filter isOdd
>> Seq.map square
>> Seq.sum
composed nums
Run Code Online (Sandbox Code Playgroud)
实际上,这通常意味着您可以使用函数组合替换在参数上使用管道的函数声明(并使用函数可用作值的事实).这是一个例子:
// Explicit function declaration
foo (fun x -> x |> bar |> goo)
// Equivalent using function composition
foo (bar >> goo)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5565 次 |
| 最近记录: |