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

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

F#イジってみてました。Functionsその11。applyとは?

2022-07-15 16:29:24 | F#

14行目と21行目の違いがわからない。applyItを使わなくても、同じでない?

17行目はラムダ式を使わないで関数を定義しているんですね。

下が一番最初の例。

 


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

3 コメント

コメント日が  古い順  |   新しい順
うん、意味が分からん(笑) (cametan_42)
2022-07-15 18:18:11
元ネタがなんだか良く分からないんですが、isamさんの言う通りですね。

元々applyってのはLispでは「カッコを外す」作用がある関数です。
例えば'(1 2)ってリストがあった場合

> (apply + '(1 2))
3
>

で「+と言う関数をリスト'(1 2)」に適用する。実行結果がまるで(+ 1 2)になるように適用する。「適用する」んでapplyなんです。
最もこういうのってはかなり基礎的な関数で、言語のコアの組み込みじゃないと出来ない。つまり「外部でユーザーが作ったりする」のは難しい関数なんですね。

# Pythonでのapplyの例
>>> import operator as op
>>> op.add(*[1, 2])
3
>>>

# リストの「カッコ」を「*」で外して(アンパックと呼ぶ)「1 + 2」を計算するようにさせる。
# この「カッコを外して」「関数適用」なんつーのはユーザーがプログラムする事が基本不可能な「構文」だ。

そもそも「リストのカッコを外す」って簡単に書いてますが、「リストが全ての基礎である」Lispでのapplyの重要度と、そうじゃない言語で「リストのカッコを外す」必要性って同じじゃないわけでしょ?
そんなわけで、OCamlやF#でapplyとか、ちょっと意味が分からないですよね(笑)。
先にも言った通り、そもそも「ユーザーが作れる」って前提じゃないですし。
それと自乗する関数、この場合はsquareItか、がそもそも引数がリストでもないし、ちょっと意味が分からん例示だ、ってのは賛成です。
返信する
cametan_42さん、コメント有難うございます (isam)
2022-07-16 11:01:58
 例のapplyItがListでも出来るのかと、用意しましたが、出来ませんでした。出来たのはnumの場合だけでした。
 関数名がapplyItとなっているだけで、しかも、引数が関数名であり、しかも関数が引数を持っている、一段関数の呼び出しが増えてる。高階関数ということでいいんですかね?
返信する
うん。 (cametan_42)
2022-07-16 16:09:55
>  例のapplyItがListでも出来るのかと、用意しましたが、出来ませんでした。出来たのはnumの場合だけでした。

でしょうね。
isamさんが提示した定義を見る限りそうだと思います。

>  関数名がapplyItとなっているだけで、しかも、引数が関数名であり、しかも関数が引数を持っている、一段関数の呼び出しが増えてる。高階関数ということでいいんですかね?

はい。
実質的にあんま意味が無いんだけど、要は高階関数作成の練習問題程度に捉えればいいんじゃないですかね?
返信する

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