Question en CAML

Résolu/Fermé
lina_litimein - Modifié par lina_litimein le 15/06/2012 à 19:48
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 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.

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
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 :

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;;
1