これらのすべてが関連しているようです。違いはなんですか?配管、合成、カリング
11
A
答えて
37
配管は、いくつかの値で操作のシーケンスを実行するために使用されます(Unixの配管のように)。各関数への入力は、前の関数の出力です。明らかに、これは各関数が単一の引数をとることを必要とします。
組成物(
<<
/>>
)は、配列内の2つの関数を呼び出すことに類似している(すなわち、第一の出力は、第2の入力である)が、それは直ちにシーケンスを呼び出すのではなく、関数を返します。カリー化はNに1を適用することにより、新たな機能を作成-1だからN引数
の関数引数は、組成物とカリー化は、配管のために使用されるのに対し、関数を作成するために使用されます呼び出し。合成とカリングは、(argsと連鎖を適用して)新しい関数を作成する方法が異なります。ダニエルが書いたものに加えて
25
、配管(|>
と<|
オペレータ)および関数組成物(>>
と<<
事業者)との間の非常に密接な対応があります。
あなたは機能の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)
関連する問題
- 1. Androidオープンループ2dカリング
- 2. ELB接続配管構成
- 3. OCamlでのパターンマッチングとカリングの組み合わせ
- 4. 配管出力
- 5. オブジェクトのカリングを無効にする
- 6. カリングはアニメーションに影響します
- 7. Quake 3のポータルと錐台のカリング
- 8. スカラのカリング関数関連の質問
- 9. 剣道グリッド配管
- 10. 配管構造エラー
- 11. のImageMagickと配管
- 12. 配管用unixコマンド
- 13. Linux配管とループ
- 14. メモリ管理に苦しんで配列メソッドを作成
- 15. クラスの集約/合成メンバー間の関係を管理する
- 16. Git操作で作成されたschema.rbの競合の管理
- 17. Javaで配管システムをシミュレート
- 18. smbpasswdへのパスワード配管
- 19. パイプ()がC++の配管パイプ
- 20. シェル配管別のコマンド
- 21. 7Z配管のsvnダンプが
- 22. Node.js配管 - 書き方は?
- 23. バッシュ配管は時々
- 24. 配管Subversionのリビジョン番号
- 25. 理解配管:PHP -c
- 26. 変更管理/構成管理
- 27. バージョン管理/構成管理for Linuxイメージ
- 28. 配管コマンドを使用してgitブランチを結合しました
- 29. Functional Programmingのカリングの価値は何ですか?
- 30. オーバーロードと同じようにカリングしていますか?
適切なアプローチを見つける必要がある例がありますか?あなたの質問はかなり広いです。 – pad
これは「プログラマー」のSOサイトにもっと適しているかもしれません。 –
私はパッドに同意します - これはかなり自由な質問です(トマスとダニエルの回答は耐えられません)。 –