• [^] # Re: Hum ...

    Posté par . En réponse au journal Votre langage idéal ?. Évalué à 4.

    Pas besoin de la fonction intermédiaire..

    Tant mieux, mais toi tu as besoin d'une variable mutable intermédiaire (donc d'un concept supplémentaire, l'assignation) et d'une boucle for (encore un concept supplémentaire). Pas clair que ta version soit "plus simple", et elle n'est certainement pas "beaucoup plus lisible" (même quand on sait qu'il faut 4 espaces devant chaque ligne pour représenter du code en Markdown).

    Et puis j'aurais dû parler de Fibonacci

    Pas de soucis:

    fib n = fib' 0 1 n
    fib' a b 0 = a
    fib' a b n = fib' b (a + b) (n - 1)
    
    

    Mais pas forcément aussi performant: il faut un compilateur assez compliqué je pense pour optimiser ça..

    Oui et non. La complexité en temps est la même dans tous les cas (linéaire); dans un langage paresseux (si ta liste est construite à la demande), la complexité mémoire est la même. Après la question est de savoir si le compilateur sait optimiser la construction de liste; en pratique GHC sait le faire (donc produira du code équivalent si on le lui demande gentiment), mais je n'aime pas trop abuser de ces optimisations et je me contenterai de dire que c'est la version la plus "lisible", et donc intéressante à donner en premier si les performances ne sont pas critiques, du moment qu'elle a la bonne complexité.