• [^] # Re: Version fonctionnelle

    Posté par (site web personnel) . En réponse à la dépêche OCaml 4.00.0 est sorti. Évalué à 7.

    val process_file : ((in_channel -> 'a), string) -> ('a = < fun >)
    ça serait beaucoup plus fidèle au code..

    L'interpréteur fait ce qu'on lui demande. Si tu veux définir une fonction dont la signature est

    val process_file : ((in_channel -> 'a), string) -> ('a = < fun >)
    
    

    c'est possible, il suffit de changer la déclaration

    let process_file (f, filename) =
     let ic = open_in filename in
     let answer = f ic in
     close_in ic;
     answer
    
    

    comme te l'a déjà fait remarquer Fabrice. Bien que ces deux définitions soient très semblables, il existe une différence dont les conséquences pratiques sont très importantes: il est beaucoup plus facile d'appliquer partiellement la première version que la seconde.

    Ainsi, si tu as un traitement f: in_channel -> 'a que tu veux appliquer sur une liste de fichiers l tu peux écrire

    List.map (process_file f) l
    
    

    avec la première version, tandis que la seconde t'oblige à introduire une fonction auxiliaire (on peut choisir une fonction anonyme) ce qui rend le code moins lisible.

    Depuis que je travaille dans une boîte qui utilise C++ je suis très malheureux car:
    — je redécouvre les charmes des boucles for;
    — personne ne sait programmer.