(les fonctions façon LISP... pour compare et add dans cet exemple) à
valcompare:t->t->int
C'est une question de point de vue, et je trouve la syntaxe OCaml bien plus cohérente quand on la regarde dans l'ensemble du langage.
Une expression de la forme val e : t se lit « e est une valeur de type t », et je ne vois pas pourquoi il faudrait changer de forme, sous prétexte que la valeur compare est ici une fonction. Le : de OCaml c'est comme le epsilon (\epsilon) des mathématiciens, il signifie l'appartenance à un ensemble. Ici, c'est l'ensemble des fonctions des t vers les fonctions des t dans les int (ça se lit t -> (t -> int)), c'est une fonction qui renvoie une fonction. De même, la fonction successeur sur les entiers a pour type int -> int, c'est une fonction des int vers les int.
En résumé, on a donc un nom pour la valeur, suivi du : (le epsilon des matheux, ou le est du français comme dans « Socrate est un homme ») puis enfin une expression qui appartient au langage des types.
Cette dernière expression, on pourrait la réutiliser telle quelle dans le langage des types, pour définir par exemple un type paramétrique, comme ici :
type'acomparator='a->'a->int
Ici comparator est une fonction des types dans les types (un type paramétrique) et 'a est le nom de son paramètre. On peut alors réécrire la signature du début ainsi:
(* la fonction `comparator` appliquée au type `t` *)valcompare:tcomparator(* t -> t -> int *)
Il y a en fait 4 langages dans OCaml :
le langage des valeurs et expressions
le langage des types des expressions
le langage des modules
le langage des types de modules ou signatures
Les deux derniers, dont tu préfères la syntaxe, ont « globalement » les même principe syntaxiques que les deux premiers qui semblent te désarçonner. Pourquoi ?
Pour le foncteur Make, on aurait pu écrire sa signature ainsi :
moduleMake:functor(S:ORDERED)->sig...end
ce qui est la même syntaxe que pour compare, à part le mot clef functor (personnellement, je le trouve inutile et j'aurais préféré qu'il soit absent, je trouve qu'il alourdit sans raison l'écriture et la lecture).
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Tous mes encouragements
Posté par kantien . En réponse à la dépêche MirageOS - un micro OS (unikernel) en OCaml. Évalué à 5. Dernière modification le 31 décembre 2021 à 00:23.
C'est une question de point de vue, et je trouve la syntaxe OCaml bien plus cohérente quand on la regarde dans l'ensemble du langage.
Une expression de la forme
val e : tse lit «eest une valeur de typet», et je ne vois pas pourquoi il faudrait changer de forme, sous prétexte que la valeurcompareest ici une fonction. Le:de OCaml c'est comme le epsilon (\epsilon) des mathématiciens, il signifie l'appartenance à un ensemble. Ici, c'est l'ensemble des fonctions destvers les fonctions destdans lesint(ça se litt -> (t -> int)), c'est une fonction qui renvoie une fonction. De même, la fonction successeur sur les entiers a pour typeint -> int, c'est une fonction desintvers lesint.En résumé, on a donc un nom pour la valeur, suivi du
:(le epsilon des matheux, ou le est du français comme dans « Socrate est un homme ») puis enfin une expression qui appartient au langage des types.Cette dernière expression, on pourrait la réutiliser telle quelle dans le langage des types, pour définir par exemple un type paramétrique, comme ici :
Ici
comparatorest une fonction des types dans les types (un type paramétrique) et'aest le nom de son paramètre. On peut alors réécrire la signature du début ainsi:Il y a en fait 4 langages dans OCaml :
Les deux derniers, dont tu préfères la syntaxe, ont « globalement » les même principe syntaxiques que les deux premiers qui semblent te désarçonner. Pourquoi ?
Pour le foncteur
Make, on aurait pu écrire sa signature ainsi :ce qui est la même syntaxe que pour
compare, à part le mot cleffunctor(personnellement, je le trouve inutile et j'aurais préféré qu'il soit absent, je trouve qu'il alourdit sans raison l'écriture et la lecture).Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.