Question en CAML
Résolu/Fermé
lina_litimein
-
Modifié par lina_litimein le 15/06/2012 à 19:48
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 15 juin 2012 à 20:03
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 15 juin 2012 à 20:03
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
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
15 juin 2012 à 20:03
15 juin 2012 à 20:03
'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;;