J'ai trouvé via le Wayback machine le vieux shootout de Doug Bagley (l'ancêtre de l'actuel Computer Language Shootout). On y trouve notament un programme qui fait la somme des entiers dans un fichier. Voici la solution de l'époque:
Je n'aimais pas trop l'utilisation d'un ref, donc j'ai décidé de ré-écrire le programme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 let sum = ref 0 let rec loop () = sum := !sum + read_int (); loop () let _ = try loop () with End_of_file -> Printf.printf "%d\n" !sum
Malheureusement, avec un très gros fichier (seq 1 1000000 > fichier.txt), ce nouveau programme plante avec une segmentation fault. Quelqu'un pourrait m'expliquer pourquoi?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 let rec sumfile sum = try sumfile (sum + read_int ()) with End_of_file -> sum let _ = Printf.printf "%d\n" (sumfile 0)
Partager