Envoyé par
bluestorm
Par exemple, je pense que le choix d'avoir une récursion implicite est toujours mauvais
Évidemment, je n'ai pas le même avis. Ce que je retiens de tes arguments, c'est que l'on a besoin de différencier le cas récursif du cas non-récursif. C'est un poil différent de ta conclusion.
Neuf fois sur dix, une fonction et un type utilisent une récursion, plutôt qu'une réutilisation. Alors, à choisir, je préfèrais avoir une syntaxe plus verbeuse pour le cas de la réutilisation.
Par exemple, ton code donnerait (je défends une idée, plutôt que la syntaxe elle-même) :
let f x with f' = sanitize (f' x)
où f' désignerait l'ancienne valeur de f (le "with <ident>" étant optionnel).
Pour ma part, je trouve le mot-clé "rec" de Caml lourd et peu agréable, surtout pour un langage où la récursion est assez fréquente.
Envoyé par
bluestorm
Il est aussi possible de mesurer la complexité des grammaires des langages de programmation, et on peut supposer qu'une grammaire complexe est "moins bonne" qu'une grammaire simple, mais on peut décrire de plusieurs façons différentes la grammaire d'un langage de programmation.
Si l'on veut une grammaire simple, robuste ("résistante au bruit"), qui n'utilise pas des symboles douteux, qui n'est pas le problème d'Haskell ("il serait donc assez délicat d'y trouver une bonne syntaxe pour la récursion explicite")... on pourrait se diriger vers du Lisp. Ce qui ne serait pas forcément une mauvaise idée, d'autant plus que ça simplifie la métaprogrammation.
Partager