Un identifiant c'est un nom. Par exemple: toto, i, maSuperVariable. C'est un élément de la syntaxe des langages:
Là où on dit que "let", "in", "for" sont des mots-clés, on dit également que "toto", "x", "MyVar" sont des identifiants.
Une variable, c'est un espace mémoire où une valeur est stockée. Par exemple, en C, si je dis "int toto = 42;", toto est l'identifiant d'une variable, qui a pour adresse &toto, et pour valeur 42.
La notion d'identifiant relève du langage de programmation, celle de variable relève de l'algorithme et du programme.
En OCaml c'est pareil que dans tous les langages... mais si vous décidez de penser fonctionnel pur, tout est valeur et fonction, puisque la notion de "mémoire" est abstraite de par l'absence d'effets de bords. Quand tu fais "let x = 42 in x + 1", tu as affaire à une valeur x qui vaut 42, et cette expression let... in a elle-même pour valeur 42+1=43. Il n'y a pas de variable qui se fait incrémenter.
Edit:
Oui, dans un contexte impur. Par exemple, en faisant, on a une variable x.
On peut dire ce qu'on veut. Moi, je dirais plutôt que tu as là défini une valeur x, qui vaut 1, et qui est de type entier. On pourrait aussi dire, si on n'est pas dans un contexte fonctionnel, qu'on déclare une variable constante dont l'identifiant est x, le type entier, et la valeur 1. Mais pas dans l'autre sens: on ne peut pas dire qu'on déclare un identifiant avec une valeur.
Edit: Les fonctions sont des valeurs, oui, mais les valeurs ne sont pas des fonctions, attention.
J'envisage plus ou moins de vous faire une conférence sur les détails de l'implémentation OCaml (représentation des valeurs, GC, inférence de types, concepts fonctionnels... que des trucs largement plus intéressants que les broutilles pour lesquels les gens se prennent la tête dans ce thread). En raison de mon incapacité à survivre devant un amphi d'inconnus (http://fr.wikipedia.org/wiki/Phobie_sociale , http://fr.wikipedia.org/wiki/Autisme), de l'emploi du temps chargé de GConfs, et du miens, j'ai aucune idée de si ça se fera.
Edit: Junior, si tu passes par là: bisous du fond de l'amphi A1 InfoSUP2014.
Code:
program := <expression>
expression := <letexp> | <intexp> | <stringexp> | <ifexp> | ...
letexp := let <identifiant> = <expression> in <expression>
intexp := [numeral]+
stringexp := "[character]*"
ifexp := if <expression> then <expression> [else <expression>]
...
Une variable, c'est un espace mémoire où une valeur est stockée. Par exemple, en C, si je dis "int toto = 42;", toto est l'identifiant d'une variable, qui a pour adresse &toto, et pour valeur 42.
La notion d'identifiant relève du langage de programmation, celle de variable relève de l'algorithme et du programme.
En OCaml c'est pareil que dans tous les langages... mais si vous décidez de penser fonctionnel pur, tout est valeur et fonction, puisque la notion de "mémoire" est abstraite de par l'absence d'effets de bords. Quand tu fais "let x = 42 in x + 1", tu as affaire à une valeur x qui vaut 42, et cette expression let... in a elle-même pour valeur 42+1=43. Il n'y a pas de variable qui se fait incrémenter.
Edit:
(09-26-2013, 22:38:48)tsunami33 Wrote: Bon alors déjà à savoir, les variables existent bel et bien en caml.
Oui, dans un contexte impur. Par exemple, en faisant
Code:
let x = ref 42 in x :=1 + !x
(09-26-2013, 22:38:48)tsunami33 Wrote: Voici un court exemple pour montrer la différence entre une variable et un identificateur :
let x = 1;;
Ici "x" est l'identificateur. C'est ni plus ni moins le nom de la variable. La variable ici c'est x, elle est de type int et vaut 1. On peut dire que l'identificateur "x" est déclaré avec le type des entiers et la valeur 1.
On peut dire ce qu'on veut. Moi, je dirais plutôt que tu as là défini une valeur x, qui vaut 1, et qui est de type entier. On pourrait aussi dire, si on n'est pas dans un contexte fonctionnel, qu'on déclare une variable constante dont l'identifiant est x, le type entier, et la valeur 1. Mais pas dans l'autre sens: on ne peut pas dire qu'on déclare un identifiant avec une valeur.
Edit: Les fonctions sont des valeurs, oui, mais les valeurs ne sont pas des fonctions, attention.
(09-30-2013, 01:40:25)Hatrix Wrote: Si vous voulez vraiment définir ce que c'est, fouillez les sources du compilateur pour voir ce qu'il se passe...
J'envisage plus ou moins de vous faire une conférence sur les détails de l'implémentation OCaml (représentation des valeurs, GC, inférence de types, concepts fonctionnels... que des trucs largement plus intéressants que les broutilles pour lesquels les gens se prennent la tête dans ce thread). En raison de mon incapacité à survivre devant un amphi d'inconnus (http://fr.wikipedia.org/wiki/Phobie_sociale , http://fr.wikipedia.org/wiki/Autisme), de l'emploi du temps chargé de GConfs, et du miens, j'ai aucune idée de si ça se fera.
Edit: Junior, si tu passes par là: bisous du fond de l'amphi A1 InfoSUP2014.