• [^] # Re: lecture oui, écriture non

    Posté par . En réponse au journal int *(*(*foo[])(int))(float*);. Évalué à 3.

    Pour écrire des fonctions prenant comme paramètre des fonctions et/ou retourner des fonctions, il faut absolument que les fonctions soient de première classe. Car il faut, que les fonctions supportent toutes les opérations courantes des autres objets : [...]

    Pourquoi ? Personne n'a jamais dit qu'il était possible d'implémenter toutes les fonction d'ordre supérieur en C (surtout pas moi, comme tu (?) l'a très justement fait remarqué plus haut, il n'y a pas de fermetures en C.

    Le C permet d'implémenter des fonctions, Le C permet de passer ces fonctions implémentés à d'autres fonction.

    Voilà un programme haskell qui implémente une fonction d'ordre supérieur :

    ordre_1 :: Int -> Int
    ordre_1 i = i
    ordre_2 :: (Int -> Int) -> Int
    ordre_2 f = f 1

    Voilà un programme C, strictement équivalent au programme haskell ci dessus :

    int ordre_1(int i){
     return i;
    }
    int ordre_2(int f(int)){ // même pas besoin de mettre l'étoile, j'ai appris quelque chose aujourd'hui
     return f(1);
    }

    Par quel miracle celui ci n'implémenterait pas de fonction d'ordre supérieur ?

    J'arrête de discuter là, la preuve est faite.

    Please do not feed the trolls