Question en CAML
Résolu
lina_litimein
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonsoir à tous, j'ai une toute petite question en CAML.
quel est le type de make _vect et map _vect ???
make_vect ;;
- : int -> 'a -> 'a vect = <fun>
map_vect;;
- : ('a -> 'b) -> 'a vect -> 'b vect = <fun>
\\ et a quoi servent ces symboles{( 'a -> 'a ),(('a -> 'b)} ????
merci d'avance pour vos conseils.
quel est le type de make _vect et map _vect ???
make_vect ;;
- : int -> 'a -> 'a vect = <fun>
map_vect;;
- : ('a -> 'b) -> 'a vect -> 'b vect = <fun>
\\ et a quoi servent ces symboles{( 'a -> 'a ),(('a -> 'b)} ????
merci d'avance pour vos conseils.
1 réponse
'a et 'b sont des types abstraits, tu peux mettre n'importe quel type concret à la place, mais dans ce cas tous les 'a seront remplacés par le même type, qui pourra être différent des types de 'b
Exemple simple :
Donc le constructeur make_vect est donné par un int (la taille du vecteur), et une valeur quelconque de type 'a qui initialise le vecteur avec cette valeur, et donne au passage son type au vecteur.
On ne pourra donc pas mélanger les types int vect, string vect, etc.
map_vect est une fonction qui prend en premier paramètre une fonction de transition qui transforme toutes les valeurs de type 'a du vecteur 'a vect, en valeurs de type 'b ce qui donne un 'b vect en résultat.
Exemple (une fonction qui donne la taille de tous les string d'un vecteur)
Exemple simple :
let min x y = (* min : 'a -> 'a -> 'a = <fun> *)
if (x<y)
then x
else y;;
Donc le constructeur make_vect est donné par un int (la taille du vecteur), et une valeur quelconque de type 'a qui initialise le vecteur avec cette valeur, et donne au passage son type au vecteur.
On ne pourra donc pas mélanger les types int vect, string vect, etc.
map_vect est une fonction qui prend en premier paramètre une fonction de transition qui transforme toutes les valeurs de type 'a du vecteur 'a vect, en valeurs de type 'b ce qui donne un 'b vect en résultat.
Exemple (une fonction qui donne la taille de tous les string d'un vecteur)
(* vect_length_string : string vect -> int vect = <fun> *) let vect_length_string = map_vect string_length;;