• [^] # Re: apprendre la programmation fonctionnelle

    Posté par . En réponse au journal Language F# - Du microsoft, mais il y a un rapport avec le libre !. Évalué à 2.

    Je programme rarement un noyau de système, en revanche j'ai souvent besoin d'un petit programme très spécialisé qui doit être prêt rapidement, facile à lire et à modifier, et correct. Pour illustrer l'intérêt d'un langage comme Caml dans ce contexte, voyons ce que donne un micro-ls : afficher le contenu du répertoire courant dans l'ordre alphabétique.
    open Unix
    (* renvoie la liste des fichiers du répertoire donné *)
    let rec lire_dir dir =
     try
     let d = readdir dir in
     d::lire_dir dir
     with End_of_file -> []
    (* affiche une liste de chaînes de caractères *)
    let rec afficher_dir = function
     h::t -> print_endline h; afficher_dir t
     | [] -> ()
    (* programme principal *)
    let _ =
     let dir = opendir (getcwd ()) in
     let l = lire_dir dir in
     afficher_dir (List.sort String.compare l);
     closedir dir
    
    Par rapport à C, on s'épargne la déclaration de nombreuses variables, on peut directement utiliser une liste que l'on trie d'un simple appel de fonction... Le résultat est un programme beaucoup plus court et qui contient moins de possibilités de bugs (que celui qui ne s'est jamais planté en bricolant à la main une liste en C me jette le premier transistor). Quand aux performances, il est fort possible que le passage à C permette de gagner quelques microsecondes, mais dans ce genre de cas ça ne change pas grand-chose.