マイクロソフトの説明
前のセクションで示した例の多くは、F# の関数宣言で暗黙的な "カリー化" を利用することで、より簡潔に記述できます。 カリー化とは、複数のパラメーターを持つ関数を、それぞれが単一のパラメーターを持つ一連の埋め込み関数に変換するプロセスです。 F# では、複数のパラメーターを持つ関数は本質的にカリー化されます。 たとえば、前のセクションの compose
は、次に示すように、3 つのパラメーターを使用する簡潔なスタイルで記述できます。
前にapply関数を定義する意味がわからなかったのですが、今回はcompose関数を定義する意味が分かりません。多分ですが、25行のように書けば、10行目から18行目まで色々書いてますが、集約されるんではと思います。しかもcomposeの定義も要らない。
composeの重要性が理解できないのですが、重要性を肝に銘じつつ、先に進んでみます。
composeは非常に重要な概念です。数学的に言うと「合成関数を生成する関数」です。極めて強力です。
写像の合成:
https://ja.wikipedia.org/wiki/%E5%86%99%E5%83%8F%E3%81%AE%E5%90%88%E6%88%90
> 多分ですが、25行のように書けば、10行目から18行目まで色々書いてますが、集約されるんではと思います。しかもcomposeの定義も要らない。
その通りでしょう。
しかし考え方次第、です。
要するに一時的(テンポラリー)に何らかの2つの関数を順次適用する結果が欲しかった、とする。
isamさんのようにやれば「関数を定義」する必要が出てくる可能性が高い。「たった一度使うだけ」なのに。
これは無名関数(ラムダ式)の考え方と同じです。高階関数の引数に高階関数であるcomposeで一時的に2つの関数を順次適用した結果を渡す。
そうすれば、「一々関数定義をしなきゃならない」と言う面倒が回避可能かもしんない。
そのため「だけ」にある、って言って良くて、それが故に非常に強力なユーティリティになるんです。
それ故に、composeはコード全体を短く出来る効力が期待出来るのです。