最新の画像[もっと見る]
「F#」カテゴリの最新記事
- F#イジってみました。Functionsその15。composeで関数を合成する
- F#イジってみてました。Functionsその14。高階関数ですよね。>カリー化
- F#イジってみてました。Function13高階関数、カリー化
- F#イジってみてました。Functionsその12。高階関数、
- F#イジってみてました。Functionsその11。applyとは?
- F#イジってみてました。Functionsその10。関数定義の仮引数。
- F#イジってみてました。関数の復習を兼ねて…。前回と同じテーマ。
- F#イジってみました。Listの復習を兼ねて
- F#イジってました。moduleとは何でしょうか?
- F#イジってみました。VSCodeでF#デバッグできるか?Windows10です。
元々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か、がそもそも引数がリストでもないし、ちょっと意味が分からん例示だ、ってのは賛成です。
関数名がapplyItとなっているだけで、しかも、引数が関数名であり、しかも関数が引数を持っている、一段関数の呼び出しが増えてる。高階関数ということでいいんですかね?
でしょうね。
isamさんが提示した定義を見る限りそうだと思います。
> 関数名がapplyItとなっているだけで、しかも、引数が関数名であり、しかも関数が引数を持っている、一段関数の呼び出しが増えてる。高階関数ということでいいんですかね?
はい。
実質的にあんま意味が無いんだけど、要は高階関数作成の練習問題程度に捉えればいいんじゃないですかね?