これらはすべて関連しているように私には思えます。違いはなんですか?
質問する
6539 次
2 に答える
60
配管は、ある値に対して一連の操作を実行するために使用されます(Unixの配管と同じように)。各関数への入力は、前の関数の出力です。明らかに、これには各関数が単一の引数を取る必要があります。
構成(
<<
/>>
)は、2つの関数を順番に呼び出す(つまり、最初の関数の出力が2番目の関数への入力である)という点で似ていますが、シーケンスをすぐに呼び出すのではなく、関数を返します。カリー化は、1からN -1の引数をNの引数の関数に適用することによって新しい関数を作成します
そのため、関数の作成には合成とカリー化が使用され、呼び出しには配管が使用されます。構成とカリー化は、新しい関数を作成する方法が異なります(argsとchainingを適用することによって)。
于 2012-04-10T15:54:07.647 に答える
37
ダニエルが書いたことに加えて、配管(|>
と<|
演算子)と関数合成(>>
と演算子)の間には非常に密接な対応があり<<
ます。
パイピングを使用していくつかのデータを一連の関数に渡す場合:
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)
于 2012-04-10T21:04:19.643 に答える