- ベストアンサー
カリー化についての解説
- カリー化とは、複数の引数を持つ関数を、1つの引数を受け取る関数の連鎖に変換することです。
- カリー化により、関数の再利用性や柔軟性が向上し、コードの可読性も向上します。
- カリー化は、関数型プログラミングの一つのテクニックであり、関数をより効果的に使用する方法として重要です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2281)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2281)
- auty
- ベストアンサー率58% (284/486)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2281)
関連するQ&A
- Javaスクリプトの初歩の初歩
Javasript覚えがてらに以下の カリー化されたソースを実行しましたが、Type Error:add is not functioという 例外が返ってきます。なぜ、ファンクションエラーになるのか教えてください <html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8"> <script src="jquery-1.9.0.min.js"> </script> <script> <!-- function add(x,y){ var oldx=x,oldy=y; if(typeof oldy==="underfined"){ return function(newy){ return oldx+newy; }; } return x+y; } typeof add(5); add(3)(4); var add2000=add(2000); add2000(10); --> </script> </head> <body> </body> </html>
- 締切済み
- JavaScript
- C言語(引数)
はじめまして。 C言語を習い始めたものです。 関数を定義するとき、よく耳にする、仮引数や実引数があると思います。 仮引数は関数の定義内で値をうけとる変数のことであり 実引数は関数を呼び出す際に渡す値を実引数というらしいのですが どこからどこまでを仮引数と呼ぶのかわかりません。 例えば、 fの関数の定義内で ↓があるとします。 (関数にする意味はないのですが、確認のためあしからず・・・) double f(double x) { x=5; return(x); } この場合、仮引数とよばれるものは double f(double x)の xが仮引数であって x=5;のxは仮引数と呼ばないのでしょうか?? もしそうならば void f(double x) { printf("%f",x); } のprintf("%f",x);内のxは仮引数とよぶのでしょうか? 質問の内容が意味不明かもしれませんが よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 関数の戻り値に関数のアドレスを返すできませんか?
戻り値に関数のアドレスを与える方法が良く分かりません. ひとまず,以下のように動くプログラムを作りたいと思っています. f2(1,2)(1); //このように引数の()を二種類に分けたいのですが 無理でしょうか?? プログラムは下のように作って実験しているのですが良く分かりません・・ どなたか分かる方居たら教えてください. int f1(int x , int y){ return 0; } ????? int ff(int x){ return f; };
- ベストアンサー
- C・C++・C#
- お願いします
int c(int x) { x = x + 3; { int t; t = 6; { int x; x = 6; t = x + t + 12; } return x + t; } } 上の関数の変数の名前替えだけが許されるという条件の下で,関数f の働き(すなわち,引数と戻り値の関係)を変えずに,上記の関数定義の4行目 { int x; x = 6; t = x + t + 12; } の(int x)を(int t) に変更して.必要最小限の変数の名前替えを施した関数定義を書け. 私はこのように定義していますので、正しいですか、「関数の変数の名前替えだけが許されるという条件の下で,関数f の働き(すなわち,引数と戻り値の関係)を変えずに」ってあまり理解できてないので、ご教授お願いいたします。 int c(int x) { x = x + 3; { int y; y = 6; { int t; t = 6; y = t + y + 12; } return x + y; } } }
- ベストアンサー
- C・C++・C#
- c言語の関数定義について
次の関数定義を考える. int f(int x) {if (x > 0) {return x * f(x-1);} else {return 1;} } この関数f と働き(すなわち,引数と戻り値の関係)が同じで再帰呼出(recursive call) を使わない関数g をC で定義せよ.ただし,オーバーフロー(overflow) については考慮しなくてよい. ”この関数f と働き(すなわち,引数と戻り値の関係)が同じで再帰呼出(recursive call) を使わない関数g をC で定義せよ”って理解できません、どのように定義したいいか、ご教授お願いします。
- ベストアンサー
- C・C++・C#
- こんな条件を満たす乱数生成関数教えてください
1.任意の周期を指定できる 2.種を指定できる(直前の生成値を引数にとる) 3.逆関数が定義できる 4.生成された乱数 x、y の距離を(定数時間で)求められる つまり y = f(x) ならxとyの距離は1、 y = f( f( f(x) ) ) なら距離3、というように 乱数としての質(均等に分布していること)はあまり重視しません。 ビット幅は32~128bitくらい(任意ならベスト)であればいいと思っています。 以下のような感じにしたいです。 int rand(x, p); // 戻り値 y = f(x)、pは周期、xは直前の乱数値 int inv(y, p); // 戻り値 x = f^-1(y) int distance(x, y) // y = f(f(x)) のとき、distance(x, y) = 2 で distance(y, x) = -2 一応以下の関数が条件1~4を満たすのですが、残念ながら乱数としての性質が皆無なので使えないです。 int rand(x, p) { return (x+1) % p; } int inv(y, p) { return y ? y - 1 : p-1; } int distance(x, y) { return y - x; } よろしくご教授お願いします。
- ベストアンサー
- C・C++・C#
- C言語の実数型の足し算
C言語初心者です。関数の勉強していて、実数型計算に出くわしました。 #include <stdio.h> float add(float a, float b) { return a+b; } int main(void) { float x=10.5,y=20.3; printf("%f %f\n",x,y); printf("%f\n",add(x,y)); return 0; } としたら、 10.500000 20.299999 30.799999 という結果になりました。今のところint型でずーっと勉強していたので、20.3の20.299999表記が怪しく感じられ、結果も同様に怪しく感じられます。どうして、10.5+20.3=30.8とすっっきり表示してくれないのでしょうか。
- ベストアンサー
- C・C++・C#
- Matlabで自作関数をオーバーロード
Matlabの組み込み関数の中には、引数の数や戻り値の数に応じて異なる作用をするものが沢山あると思います。 例えば組み込みのmax関数だと y=max(x) ならxの第一次元にについての最大値を返しますし、 [y,i]=max(x) なら、さらに i に最大値のindexを代入、 一方 x=max(x,y) ならx,yの各要素について大きい方を取った行列を、 x=max(x,[],d) ならxのd次元についての最大化をしてくれます。 質問ですが、そういう関数を自分で作ることは可能ですか? function [z,w]=f(x,y) という風に関数を定義してしまうと、たとえyを関数中で利用しない場合でも、引数yを指定しなければエラーになってしまいます。同じ関数名でも呼び方に応じて異なった操作をさせることはできないでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
補足
詳細な解説ありがとうございます。もう1つ伺っておきたいのですが、この関連の問題で、二乗した値を返す関数をCurryを使用して作成せよというのがあるのですが、以下のような式になりますか?? var square = curry(function(x,y){return y * y;}, n); ただし、この場合、Curryの第二引数nは、実際にはどこからも参照されることがないので、なんだか違う気がするのですが、実際に実行してみたところ、二乗の値は返ってきます。いただいたコメントを拝見 をするに、この問題(二乗した値を返す)という内容自体、あまりcurryを使うメリットにはならないように思うのですが。。。意味があって出題されていると思うので、念のため質問させていただく次第です。 いろいろすみませんが、アドバイスをいただけると光栄です。