29Fermer31
SallyLe 26/01/2006 à 19:02
Moumou > bon je réponds d'abord à la nouvelle question. Non c'est 'a list qui est un sous-type de int list je crois. J'arrête pas de m'embrouiller avec ça à vrai dire c'est tordu mais... oui c'est ça. Si tu prends une valeur de type int list, tu ne peux en général pas la considérer comme une valeur de type 'a list. Par exemple [ 3 ] n'est pas de type 'a list. En revanche si tu prends une valeur de type 'a list, tu peux toujours la considérer comme une int list : c'est facile, il n'existe qu'une seule valeur de type 'a list et c'est [].

En fait il est faux que ocaml ne connaît pas le sous-typage, ce que veut dire BookeldOr c'est que ce sous-typage n'est jamais implicite. On m'a dit tout à l'heure qu'il n'était pas possible d'avoir à la fois le sous-typage implicite et l'inférence de types à la caml (je sais pas trop si c'est juste des questions de complexité d'algorithme ou si c'est plus profond que ça comme raisons). Mais tu as l'opérateur de coercition (je sais pas si on dit comme ça en français grin) qui force à considérer la valeur du sous-type comme une valeur du super-type. Exemple :
# ([] :> int list);;
- : int list = []
# ([1] :> 'a list);;
- : int list = [1]
# (`a :> [`a|`b]);;
- : [ `a | `b ] = `a
Tiens intéressant le deuxième résultat. Ah ben oui, en fait tu peux considérer [ 1 ] comme une 'a list à condition que 'a soit égal à int en fait, donc 'a list est bien d'un certain point de vue un sous-type de int list, mais sauf que c'est seulement pour une certaine valeur de 'a, c'est pas le type 'a list avec la variable libre...

bon je réponds à l'autre question dans un autre post ^^