Désolé de m'insérer dans la discussion mais je ne vois pas le rapport entre ta réponse et la remarque de bluestorm.
Nul part dans ce que fait remarquer bluestorm il n'est question du fonctionnement de l'opérateur "=". La remarque de bluestorm concerne le fonctionnement du filtrage dans Erlang.
En Erlang, quand tu utilises dans une règle de filtrage une variable à portée, le compilateur considère que tu filtres sur sa "valeur" et utilise donc la relation d'égalité (pas l'opérateur =) sur le type que tu es entrain de matcher pour savoir si la règle est satisfaite.
Prenons l'exemple de la règle (x,x) dans le filtrage d'un couple quand la variable x n'est pas définie. Selon le langage, on va distinguer trois comportements.
Le premier est celui d'Ocaml. Le compilateur refusera cette règle arguant que tu affectes à la variables x deux valeurs potentiellement différentes.
Le second est celui d'Erlang. Il commencera par affecter le premier élément du couple à x. Ensuite, puisqu'il rencontre la variable x déjà définie dans l'espace de nom courant, il test l'égalité entre le deuxième élément et la valeur de x. Si il obtient vrai, il considère la règle satisfaite sinon il passe à la suivante.
Un troisième comportement consiste à affecter à x la première valeur. Puis, puisque on rencontre x à nouveau, lui réaffecter la seconde valeur en "oubliant" la première.
Bluestorm reproche à Erlang de ne pas permettre d'utiliser ce troisième comportement. Là, on pourrait rétorquer qu'après tout, c'est un choix d'implémentation du filtrage. Il n'y a qu'à s'y plier.
Dans un sens, c'est vrai. Néanmoins, ce comportement est parfois pénible pour le programmeur parce qu'il l'oblige à connaître parfaitement les variables à portée quand il écrit une règle de filtrage.
En effet, considérons un exemple moins "extrême" que la règle (x,x). Quand je filtre un couple, j'utilise souvent la règle (a,b).
En Ocaml, je n'ai jamais de problème. Si a et b sont déjà définis, le filtrage les réaffectent dans un nouvel espace de noms.
En Erlang, pour peu que je n'ai pas fait attention aux variables à portée, je n'ai pas le comportement attendu. Et là, c'est le drame.
Reia met tout le monde d'accord en introduisant deux syntaxes permettant d'utiliser l'un ou l'autre des comportements au choix.
[^] # Re: V
Posté par Benoit . En réponse à la dépêche Apprendre un langage de programmation par an. Évalué à 3.
Nul part dans ce que fait remarquer bluestorm il n'est question du fonctionnement de l'opérateur "=". La remarque de bluestorm concerne le fonctionnement du filtrage dans Erlang.
En Erlang, quand tu utilises dans une règle de filtrage une variable à portée, le compilateur considère que tu filtres sur sa "valeur" et utilise donc la relation d'égalité (pas l'opérateur =) sur le type que tu es entrain de matcher pour savoir si la règle est satisfaite.
Prenons l'exemple de la règle (x,x) dans le filtrage d'un couple quand la variable x n'est pas définie. Selon le langage, on va distinguer trois comportements.
Le premier est celui d'Ocaml. Le compilateur refusera cette règle arguant que tu affectes à la variables x deux valeurs potentiellement différentes.
Le second est celui d'Erlang. Il commencera par affecter le premier élément du couple à x. Ensuite, puisqu'il rencontre la variable x déjà définie dans l'espace de nom courant, il test l'égalité entre le deuxième élément et la valeur de x. Si il obtient vrai, il considère la règle satisfaite sinon il passe à la suivante.
Un troisième comportement consiste à affecter à x la première valeur. Puis, puisque on rencontre x à nouveau, lui réaffecter la seconde valeur en "oubliant" la première.
Bluestorm reproche à Erlang de ne pas permettre d'utiliser ce troisième comportement. Là, on pourrait rétorquer qu'après tout, c'est un choix d'implémentation du filtrage. Il n'y a qu'à s'y plier.
Dans un sens, c'est vrai. Néanmoins, ce comportement est parfois pénible pour le programmeur parce qu'il l'oblige à connaître parfaitement les variables à portée quand il écrit une règle de filtrage.
En effet, considérons un exemple moins "extrême" que la règle (x,x). Quand je filtre un couple, j'utilise souvent la règle (a,b).
En Ocaml, je n'ai jamais de problème. Si a et b sont déjà définis, le filtrage les réaffectent dans un nouvel espace de noms.
En Erlang, pour peu que je n'ai pas fait attention aux variables à portée, je n'ai pas le comportement attendu. Et là, c'est le drame.
Reia met tout le monde d'accord en introduisant deux syntaxes permettant d'utiliser l'un ou l'autre des comportements au choix.