Bonjour,
J'essaie d'écrire une fonction sum
qui retourne la somme des éléments d'une liste d'entiers. Jusque là, rien de très compliqué :
1 2 3 | let rec sum = function | [] -> 0 | h::t -> h + sum t;; |
Maintenant, je voudrais que la fonction soit tail-recursive (je ne suis pas sûr du terme français). J'ai écrit ça :
1 2 3 4 5 6 7 | let sum2 l = let rec loop l' acc = match l' with | [] -> acc | h::t -> loop t acc+h in loop l 0;; |
Cependant…
1 | sum2 (List.init 1000000 (Fn.id));; |
ne fonctionne pas :
1 | Stack overflow during evaluation (looping recursion?). |
La tail-récursivité (?) est bien censée nous débarrasser du stack overflow, ou c'est encore mon cerveau qui déconne ?
+0
-0