(Je comprends que C ne soit pas destiné à être utilisé de manière fonctionnelle Cependant, ayant la programmation fonctionnelle appris, j'ai du mal à penser différemment..)Comment soulever une fonction pour prendre un paramètre supplémentaire en C?
Compte tenu de ces restrictions:
- Aucune fonctions imbriquées parce que clang l'interdit (donc pas d'expressions lamda)
- pas variables globales
peut-on penser à une façon de soulever une fonction f pour prendre un paramètre supplémentaire pour adapter un prototype, comme e ce nouveau paramètre sera ignoré lorsque f est exécuté?
Voici en détail ce que je veux faire:
Je veux adapter une fonction f dont le type est:
f :: void f(char *s)
dans une fonction g qui prend une fonction comme un argument (appeler arg), dont le type est la suivante:
arg :: void f(unsigned int i, char *s)
Ainsi, le type de g est:
g :: void g(void (*f) (unsigned int, char))
La solution dans haskell serait la suivante:
g (const f)
Est-ce même possible, peut-être avec une sorte de magie macro?
EDIT: Pour mieux comprendre, voici le code actuel. Le corps de ft_striter doit être complété. Le but est: appliquer la fonction f à chaque caractère d'une chaîne, en utilisant ou non son index i.
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);
}
Est-ce que 'f' est fixe ou variable? – fuz
Une façon de répondre à cette question serait de trouver en quelque sorte un moyen de permettre à f d'être visible par arg, de pouvoir appeler f dans son corps de fonction. – qleguennec
f est une variable relative à g – qleguennec