Il y a grosso-modo deux raisons: la première, c'est qu'il est possible en OCaml de faire une fonction qui prend un n-uplet d'argument, comme en C, et de tout programmer comme cela:
(* val process_file : (in_channel -> 'a) * string -> 'a *)letprocess_file(f,filename)=letic=open_infilenameinletanswer=ficinclose_inic;answer
Tu peux généraliser la fonction précédente au nombre d'arguments que tu veux. Le compilateur natif d'OCaml est d'ailleurs assez intelligent pour compiler de la même façon un appel f x y et un appel f (x,y) au niveau du code assembleur, c'est donc uniquement un choix du programmeur.
La seconde raison, c'est effectivement qu'il est parfois très pratique d'écrire des fonctions auxquelles on ne fournit pas tous les arguments: par exemple, si je définis une fonction println : out_channel -> string -> unit, je peux la faire itérer sur un répertoire pour afficher tous ses éléments de la façon suivante, puis définir des fonctions spécialisées pour stderr et stdout:
[^] # Re: Version fonctionnelle
Posté par Fabrice Le Fessant . En réponse à la dépêche OCaml 4.00.0 est sorti. Évalué à 5. Dernière modification le 17 août 2012 à 19:17.
Il y a grosso-modo deux raisons: la première, c'est qu'il est possible en OCaml de faire une fonction qui prend un n-uplet d'argument, comme en C, et de tout programmer comme cela:
Tu peux généraliser la fonction précédente au nombre d'arguments que tu veux. Le compilateur natif d'OCaml est d'ailleurs assez intelligent pour compiler de la même façon un appel
f x yet un appelf (x,y)au niveau du code assembleur, c'est donc uniquement un choix du programmeur.La seconde raison, c'est effectivement qu'il est parfois très pratique d'écrire des fonctions auxquelles on ne fournit pas tous les arguments: par exemple, si je définis une fonction
println : out_channel -> string -> unit, je peux la faire itérer sur un répertoire pour afficher tous ses éléments de la façon suivante, puis définir des fonctions spécialisées pourstderretstdout:Le même programme à la C:
Personnellement, je trouve la version avec l'application partielle beaucoup moins verbeuse, mais les deux sont aussi efficaces l'une que l'autre…