23Fermer25
SallyLe 27/01/2011 à 14:23
Euh ça dépend ce que tu appelles un informaticien, mais je côtoie plein de gens qui maîtrisent le fonctionnel ; sinon j'ai vu des étudiants qui n'y comprenaient rien mais ils comprenaient pas forcément mieux le java... après tu as plein de gens qui ne maîtrisent pas le fonctionnel tout simplement parce qu'ils ne s'y intéressent pas (ils pensent que ça ne leur servira à rien en pratique parce que c'est pas utilisé dans l'industrie etc. ; du coup même dans le cas où ils l'apprennent c'est de mauvaise grâce, ils ne cherchent pas vraiment à l'utiliser), mais c'est pas une question de difficulté intrinsèque.

Mais bon j'avoue qu'un langage fonctionnel pur à évaluation paresseuse comme haskell c'est déstabilisant parce que comprendre ce que le programme fait concrètement devient non évident, mais si tu restes dans un langage à évaluation stricte comme ocaml je trouve ça largement intuitif (tu sais exactement dans quel ordre il évalue quoi, en fait c'est tout à fait compatible avec une vision opérationnelle du programme, qui est, il me semble, en général ce que j'ai...) Bref ce n'est pas du style fonctionnel ou impératif que vient la plus ou moins grande difficulté à mon avis. Franchement, pour reprendre ton exemple, entre avoir une variable que tu mets à jour par assignation à chaque itération d'une boucle ou un accumulateur que tu mets à jour en le repassant à chaque appel récursif, c'est exactement la même chose écrite de façon légèrement différente, il n'y en a pas un qui est plus compliqué que l'autre...

e, tu fais (en pseudo-langage foireux)s := ""; i := n; while i > 0 { s := (i % 10) + s; i := i / 10; } return sJe sais pas moi, pour calculer la représentation du nombre n en base 10 par exemplrn s }
ou bienreturn boucle("", n)
where boucle(s, i) = {
  if i > 0 return boucle((i % 10) + s, i / 10)
  else retu
Dans les deux cas tu donnes une valeur initiale à tes deux variables s et i, puis tu entres dans une boucle ou fonction, tu fais un test, s'il est positif tu reboucles ou rappelles récursivement en ayant mis à jour i et s, s'il est négatif tu t'arrêtes et tu renvoies s.