(私はCは、機能的な方法で使用されるものではないことを理解ししかし、関数型プログラミングを学んだ、私はトラブル違った考えを持っている。。)Cで余分なパラメータを取る関数を持ち上げるには?
それらの制限を考える:ので
- ありませんネストされた関数を打ち鳴らすは(ありませんので、ラムダ式)
は、我々はそのような目として、プロトタイプに合わせて追加のパラメータを取る関数fを持ち上げる方法を考えることができていないグローバル変数を禁じfが実行されると、新しいパラメータは無視されますか?ここで
は、私が何をしたいのかを詳細に示します。
私はそのタイプである関数f収まるようにしたい:引数としての機能を取る関数gで
f :: void f(char *s)
(それを呼び出すに引数)、そのタイプである:
arg :: void f(unsigned int i, char *s)
従って、Gの種類がある:
g :: void g(void (*f) (unsigned int, char))
Haskellではソリューションは、次のようになります。
g (const f)
は多分マクロ魔法のいくつかの種類と、そのさえ可能ですか?
編集:理解を深めるため、実際のコードを示します。 ft_striterの本体を完成させる必要があります。目的は、インデックスiを使用するか使用しないかによって、関数fを文字列のすべての文字に適用することです。
void ft_striter(char *s, void (*f) (char *s))
{
ft_striteri(?);
}
static void ft_striteri_helper(char *s, unsigned int i, void (*f)(unsigned int, char*))
{
if (*s)
{
f(i, s);
ft_striteri_helper(s + 1, i + 1, f);
}
}
void ft_striteri(char *s, void (*f)(unsigned int, char*))
{
ft_striteri_helper(s, 0, f);
}
'f'は固定か変数か – fuz
その質問に答える1つの方法は、関数本体でfを呼び出すことができるように、fをargに見えるようにする方法を見つけることです。 – qleguennec
fはg – qleguennec