1

Bonjour,

je suis débutante en Ocaml,

et je me demande s'il ya une différence entre les 2 facons de créer des Types en Ocaml:

type mon_type{a:int; b:int}

et

type mon_type=a of int|b of int

merci bcp en avance

2

Dans le premier cas la donnée est un couple d'entiers, l'un avec le label a et l'autre avec le label b.

Dans le second cas il n'y a qu'un seul entier, soit avec le constructeur a, soit avec le constructeur b.

Donc ce n'est pas du tout le même type.
Les droits inaliénables du troll :
1) le droit d'avoir raison
2) le droit d'être péremptoire
3) le droit de ne pas lire
4) le droit de ne pas répondre
5) le droit d'être de mauvaise foi
6) Autant pour moi / Faignant / Vivent Tintin et Milou

3

Je plussoie Hippo, et en plus on ne les appelle pas de la même manière.

Pour la première définition, ça donnera :
# let sdfds = {a = 42; b = 53;}
val sdfds : mon_type1 {a = 42; b = 53}

# (* Pour acceder au champ b : *) sdfds.b;;
- : int = 53


Pour la deuxième, telle que la définition est écrite, ça ne marche même pas, il faut écrire en majuscules :

# type mon_type2 = A of int | B of int;;

# let chose = A(42);;
val chose : mon_type2 = A 42;;

# let chose = B(53);;
val chose : mon_type2 = B 53;;

# chose;;
- : mon_type2 = B 53;;

# (* Le "A 42" n'est meme plus accessible *);;

4

merci bcp à vous 2

smile

5

( en gros le premier est un *et* (on enregistre une valeur a de type int et une valeur b de type int ) alors que le second est un *ou* (on a soit une valeur "de constructeur" a de type int, soit une valeur de constructeur b de type int )

Pour comprendre l'utilité on peut prendre un exemple du genre:

type point{x:int; b:int} qui va être le type des points entiers dans le plan avec ses coordonnées.

Et par exemple:

type humain = male of int | femelle of int

et donc un humain sera soit un mâle de tel âge soit une femelle de tel âge. Quand on a une donnée de type humain enregistrée, on peut faire un pattern-matching pour savoir si c'est un mec ou une fille et extraire l'âge en même temps.
«Les gens exigent la liberté d’expression pour compenser la liberté de pensée qu’ils préfèrent éviter.» - Sören Kierkegaard

La République, c’est comme la syphilis : quand on l’a attrapée, soit on se fait sauter le caisson, soit on essaie de vivre avec.

6

merci,
maintenant je comprends la différence entre les 2 définitions des types