新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

F#イジってみてました。Function13高階関数、カリー化

2022-07-17 22:44:55 | F#

マイクロソフトの説明

 前のセクションで示した例の多くは、F# の関数宣言で暗黙的な "カリー化" を利用することで、より簡潔に記述できます。 カリー化とは、複数のパラメーターを持つ関数を、それぞれが単一のパラメーターを持つ一連の埋め込み関数に変換するプロセスです。 F# では、複数のパラメーターを持つ関数は本質的にカリー化されます。 たとえば、前のセクションの compose は、次に示すように、3 つのパラメーターを使用する簡潔なスタイルで記述できます。

 前にapply関数を定義する意味がわからなかったのですが、今回はcompose関数を定義する意味が分かりません。多分ですが、25行のように書けば、10行目から18行目まで色々書いてますが、集約されるんではと思います。しかもcomposeの定義も要らない。


コメント (2)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« F#イジってみてました。Funct... | トップ | F#イジってみてました。Funct... »
最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
Unknown (isamrx72)
2022-07-18 19:57:08
cametan_42さん、コメント有難うございます。
 composeの重要性が理解できないのですが、重要性を肝に銘じつつ、先に進んでみます。
返信する
Unknown (cametan_42)
2022-07-17 23:14:49
> 今回は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はコード全体を短く出来る効力が期待出来るのです。
返信する

F#」カテゴリの最新記事