関数を引数とする関数について

投稿者: Anonymous

c言語では関数を引数にとる関数を定義できて、

double calc1(double a);
double calc2(double func(double),double a){
    return func(a);
}

のようにすれば、

calc2(calc1,a);

という計算ができますが、calc1が2変数関数だったときに、

double calc1(double a,double b);

「calc1のaにある変数を代入した関数」をcalc2に渡すことはできますか?

解決

ご質問のように多引数の関数の一部の引数に値を与えて、より引数の少ない関数を得ることを「部分適用」と言ったりしますが、C言語そのものには部分適用を簡単に表現する機構はありません。(特殊なABIを採用するコンパイラで、比較的簡単にそんなことができるものもあるようですが。)

別に1引数の中間関数を定義する必要があるでしょう。

double calc1(double a, couble b);

double calc1partial5(double b) {
    return calc1(5.0, b);
}

calc2(calc1partial5, a);

「calc1のaにある変数を代入」の「ある変数」がローカル変数だったりすると、通常のC言語の関数として構成するのは無理だろうと思います。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *