10-12-2013, 09:07:44
S'est-on vu hier ?
Pour information, tu remarques peut-être que ça ressemble beaucoup à un champ "mutable". En fait, une référence *est* un mutable:
Mais oublie tout ceci; c'est pas fonctionnel, ça pue.
Oui, les définitions de valeurs forment des couples "nom - valeur" dans un environnement, et ceci est évidemment implémenté sous forme de variables.
Ce qui est vraiment important, c'est de comprendre que les valeurs / "variables constantes" ne peuvent pas subir d'affectation. Le programmeur OCaml ne peut pas modifier l'environnement courant, il ne peut qu'y ajouter des redéfinitions. L'exemple suivant *redéfinit* un nouveau x. Il ne modifie pas le premier x:
Non, car tu ne fais que redéfinir x localement à chaque appel.
(10-11-2013, 01:56:39)tsunami33 Wrote:Il s'agit d'une référence. "!a" accède à la valeur, ":=" modifie celle-ci. On dit que la syntaxe est un peu moche parce que le concept derrière l'est lui-même, et que ça permet de décourager leur usage.(10-01-2013, 22:17:49)yroeht Wrote: Oui, dans un contexte impur. Par exemple, en faisant, on a une variable x.Code:let x = ref 42 in x :=1 + !x
Là désolé mais mon niveau ne suit plus je ne comprends pas cette expression. J'imagine que ça viendra plus tard avec les cours. M'enfin si j'essaye de comprendre je vois que x est ici une sorte de pointeur... Mais bon je suis pas sûr du tout. Tu peux expliquer stp ? :/
Pour information, tu remarques peut-être que ça ressemble beaucoup à un champ "mutable". En fait, une référence *est* un mutable:
Code:
type 'a ref = { mutable content : 'a }
let ref x = { content = x }
let deref r = r.content
let assign r x = r.content <- x; x
Mais oublie tout ceci; c'est pas fonctionnel, ça pue.
(10-11-2013, 01:56:39)tsunami33 Wrote: et que chaque environnement soit stocké dans la RAM au même titre que n'importe quelle variable classique dans un autre langage.
Oui, les définitions de valeurs forment des couples "nom - valeur" dans un environnement, et ceci est évidemment implémenté sous forme de variables.
Ce qui est vraiment important, c'est de comprendre que les valeurs / "variables constantes" ne peuvent pas subir d'affectation. Le programmeur OCaml ne peut pas modifier l'environnement courant, il ne peut qu'y ajouter des redéfinitions. L'exemple suivant *redéfinit* un nouveau x. Il ne modifie pas le premier x:
Code:
let x = 42 in
let x = 43 in
x
(10-11-2013, 01:56:39)tsunami33 Wrote: Dans le cas d'une fonction récursive il se passe un truc assez intéressant :
Apparemment caml [...] ne change pas la valeur de x à chaque itération comme on pourrait penser qu'il le ferait.Code:let x = 0;;
let rec f y =
if y = 0 then
0
else
let x = x + 1 in
x + f (y-1);;
let x = 10;;
Non, car tu ne fais que redéfinir x localement à chaque appel.