Oui, et cela poserait un autre problème, car il me semble que
la norme C ne garantit pas que a - b - c et (a - b) - c soient
équivalents, l'évaluation d'expressions flottantes étant largement
implementation-defined.
Oui, et cela poserait un autre problème, car il me semble que
la norme C ne garantit pas que a - b - c et (a - b) - c soient
équivalents, l'évaluation d'expressions flottantes étant largement
implementation-defined.
Oui, et cela poserait un autre problème, car il me semble que
la norme C ne garantit pas que a - b - c et (a - b) - c soient
équivalents, l'évaluation d'expressions flottantes étant largement
implementation-defined.
Le Mon, 06 Sep 2010 14:51:01 +0200,
Pierre Maurette écrivait :...
Troll detected !...
Enfin, j'ai remarqué que:
a | b& c | d
a& b | c& d
a || b&& c || d
a&& b || c&& d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Oui. Il n'y a aucun problème là-dedans. Ce qui est litigieux, mais
aussi en mathématiques de base, ce sont des expressions comme
a - b - c
puisque le résultat est différent selon l'associativité.
C'est dans ce cas qu'il faut mettre des parenthèses pour la lisibilité du
code.
On a beau jeu de dire que l'associativité se fait de gauche à droite.
Le Mon, 06 Sep 2010 14:51:01 +0200,
Pierre Maurette<maurettepierre@wanadoo.fr> écrivait :
...
Troll detected !
...
Enfin, j'ai remarqué que:
a | b& c | d
a& b | c& d
a || b&& c || d
a&& b || c&& d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Oui. Il n'y a aucun problème là-dedans. Ce qui est litigieux, mais
aussi en mathématiques de base, ce sont des expressions comme
a - b - c
puisque le résultat est différent selon l'associativité.
C'est dans ce cas qu'il faut mettre des parenthèses pour la lisibilité du
code.
On a beau jeu de dire que l'associativité se fait de gauche à droite.
Le Mon, 06 Sep 2010 14:51:01 +0200,
Pierre Maurette écrivait :...
Troll detected !...
Enfin, j'ai remarqué que:
a | b& c | d
a& b | c& d
a || b&& c || d
a&& b || c&& d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Oui. Il n'y a aucun problème là-dedans. Ce qui est litigieux, mais
aussi en mathématiques de base, ce sont des expressions comme
a - b - c
puisque le résultat est différent selon l'associativité.
C'est dans ce cas qu'il faut mettre des parenthèses pour la lisibilité du
code.
On a beau jeu de dire que l'associativité se fait de gauche à droite.
On 09/06/2010 03:09 PM, JKB wrote:Le Mon, 06 Sep 2010 14:51:01 +0200,
Pierre Maurette écrivait :...
Troll detected !...
Enfin, j'ai remarqué que:
a | b& c | d
a& b | c& d
a || b&& c || d
a&& b || c&& d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Oui. Il n'y a aucun problème là-dedans. Ce qui est litigieux, mais
aussi en mathématiques de base, ce sont des expressions comme
a - b - c
Ha bon ? Même en maths de base ? Ca fait pourtant bien ce que ça dit.
puisque le résultat est différent selon l'associativité.
L'expression en tant que telle n'a rien à voir avec l'associativité, que
ce soit en maths ou en C. La seule règle à suivre est que ça s'applique
de gauche à droite. Il n'y a aucun mystère là-dedans, même pas la
moindre petite subtilité, ni même une paire de parenthèses qui, soit dit
en passant, rajoutent une autre règle à suivre.C'est dans ce cas qu'il faut mettre des parenthèses pour la lisibilité du
code.
Et tu parles de troll... tu dis que :
a - b - c
est moins lisible que :
a - (b + c)
C'est faux ! La deuxième expression dit, en substance, qu'il faut
"strictement faire d'abord l'opération de droite puis ensuite celle de
gauche", l'inverse de ce qu'on fait de manière naturelle.
Mais il y a des contextes où le schéma de pensée est, strictement, la
soustraction de b, puis la soustraction de c. Dans ces contextes, c'est
ce qu'on appelle du code auto-documenté. Le remplacer par ta version
soit-disant lisible, cela revient à mentir au lecteur.
Maintenant, imagine qu'on récupère ce contexte dans un autre langage
fortement typé (au hasard, C++) et qu'on veuille changer les types de
l'expression par des types dont la soustraction EST associative (au
hasard, des quaternions). Le mensonge touchera aussi le compilateur et
se transformera en erreur non détectée (pour peu qu'il implémente aussi
l'addition pour ce type, ce qui est généralement le cas si la
soustraction existe), et ça, c'est bien plus grave.
On a beau jeu de dire que l'associativité se fait de gauche à droite.
C'est toi qui le dit ! Ne t'en déplaise, la clé, c'est qu'on apprend
d'abord à lire de gauche à droite (en occident du moins c'est très
répandu), ensuite on apprend qu'en mathématiques, l'ordre des opérations
suit la même règle que l'ordre de lecture. Plus tard, on apprendra
l'usage des parenthèses. Enfin, on étudiera le concept d'associativité.
Quand je lis :
a - b - c
ça fait bien ce que ça dit, et ça dit :
(a - b) - c
et non pas
a - (b + c)
qui n'est équivalent que dans certains ensembles dont R (je te
l'accorde, c'est le seul ensemble dans lequel on peut travailler avec
les opérateurs de C). Mais même dans R, rien n'impose pas qu'on doive
penser "soustraire le total" plutôt que "soustraire un à un". Question
de contexte.
Que je sorte de l'école primaire ou que je sois Einstein, je sais ce que
fait a - b - c. Ca a le mérite d'être extrêmement lisible, MEME si on a
oublié les cours sur l'associativité, voire les parenthèses. Alors pour
la lisibilité, tu repasseras.
On 09/06/2010 03:09 PM, JKB wrote:
Le Mon, 06 Sep 2010 14:51:01 +0200,
Pierre Maurette<maurettepierre@wanadoo.fr> écrivait :
...
Troll detected !
...
Enfin, j'ai remarqué que:
a | b& c | d
a& b | c& d
a || b&& c || d
a&& b || c&& d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Oui. Il n'y a aucun problème là-dedans. Ce qui est litigieux, mais
aussi en mathématiques de base, ce sont des expressions comme
a - b - c
Ha bon ? Même en maths de base ? Ca fait pourtant bien ce que ça dit.
puisque le résultat est différent selon l'associativité.
L'expression en tant que telle n'a rien à voir avec l'associativité, que
ce soit en maths ou en C. La seule règle à suivre est que ça s'applique
de gauche à droite. Il n'y a aucun mystère là-dedans, même pas la
moindre petite subtilité, ni même une paire de parenthèses qui, soit dit
en passant, rajoutent une autre règle à suivre.
C'est dans ce cas qu'il faut mettre des parenthèses pour la lisibilité du
code.
Et tu parles de troll... tu dis que :
a - b - c
est moins lisible que :
a - (b + c)
C'est faux ! La deuxième expression dit, en substance, qu'il faut
"strictement faire d'abord l'opération de droite puis ensuite celle de
gauche", l'inverse de ce qu'on fait de manière naturelle.
Mais il y a des contextes où le schéma de pensée est, strictement, la
soustraction de b, puis la soustraction de c. Dans ces contextes, c'est
ce qu'on appelle du code auto-documenté. Le remplacer par ta version
soit-disant lisible, cela revient à mentir au lecteur.
Maintenant, imagine qu'on récupère ce contexte dans un autre langage
fortement typé (au hasard, C++) et qu'on veuille changer les types de
l'expression par des types dont la soustraction EST associative (au
hasard, des quaternions). Le mensonge touchera aussi le compilateur et
se transformera en erreur non détectée (pour peu qu'il implémente aussi
l'addition pour ce type, ce qui est généralement le cas si la
soustraction existe), et ça, c'est bien plus grave.
On a beau jeu de dire que l'associativité se fait de gauche à droite.
C'est toi qui le dit ! Ne t'en déplaise, la clé, c'est qu'on apprend
d'abord à lire de gauche à droite (en occident du moins c'est très
répandu), ensuite on apprend qu'en mathématiques, l'ordre des opérations
suit la même règle que l'ordre de lecture. Plus tard, on apprendra
l'usage des parenthèses. Enfin, on étudiera le concept d'associativité.
Quand je lis :
a - b - c
ça fait bien ce que ça dit, et ça dit :
(a - b) - c
et non pas
a - (b + c)
qui n'est équivalent que dans certains ensembles dont R (je te
l'accorde, c'est le seul ensemble dans lequel on peut travailler avec
les opérateurs de C). Mais même dans R, rien n'impose pas qu'on doive
penser "soustraire le total" plutôt que "soustraire un à un". Question
de contexte.
Que je sorte de l'école primaire ou que je sois Einstein, je sais ce que
fait a - b - c. Ca a le mérite d'être extrêmement lisible, MEME si on a
oublié les cours sur l'associativité, voire les parenthèses. Alors pour
la lisibilité, tu repasseras.
On 09/06/2010 03:09 PM, JKB wrote:Le Mon, 06 Sep 2010 14:51:01 +0200,
Pierre Maurette écrivait :...
Troll detected !...
Enfin, j'ai remarqué que:
a | b& c | d
a& b | c& d
a || b&& c || d
a&& b || c&& d
génèrent un warning, alors que:
a + b * c + d
a * b + c * d
laissent gcc muet. Est-ce logique ?
Oui. Il n'y a aucun problème là-dedans. Ce qui est litigieux, mais
aussi en mathématiques de base, ce sont des expressions comme
a - b - c
Ha bon ? Même en maths de base ? Ca fait pourtant bien ce que ça dit.
puisque le résultat est différent selon l'associativité.
L'expression en tant que telle n'a rien à voir avec l'associativité, que
ce soit en maths ou en C. La seule règle à suivre est que ça s'applique
de gauche à droite. Il n'y a aucun mystère là-dedans, même pas la
moindre petite subtilité, ni même une paire de parenthèses qui, soit dit
en passant, rajoutent une autre règle à suivre.C'est dans ce cas qu'il faut mettre des parenthèses pour la lisibilité du
code.
Et tu parles de troll... tu dis que :
a - b - c
est moins lisible que :
a - (b + c)
C'est faux ! La deuxième expression dit, en substance, qu'il faut
"strictement faire d'abord l'opération de droite puis ensuite celle de
gauche", l'inverse de ce qu'on fait de manière naturelle.
Mais il y a des contextes où le schéma de pensée est, strictement, la
soustraction de b, puis la soustraction de c. Dans ces contextes, c'est
ce qu'on appelle du code auto-documenté. Le remplacer par ta version
soit-disant lisible, cela revient à mentir au lecteur.
Maintenant, imagine qu'on récupère ce contexte dans un autre langage
fortement typé (au hasard, C++) et qu'on veuille changer les types de
l'expression par des types dont la soustraction EST associative (au
hasard, des quaternions). Le mensonge touchera aussi le compilateur et
se transformera en erreur non détectée (pour peu qu'il implémente aussi
l'addition pour ce type, ce qui est généralement le cas si la
soustraction existe), et ça, c'est bien plus grave.
On a beau jeu de dire que l'associativité se fait de gauche à droite.
C'est toi qui le dit ! Ne t'en déplaise, la clé, c'est qu'on apprend
d'abord à lire de gauche à droite (en occident du moins c'est très
répandu), ensuite on apprend qu'en mathématiques, l'ordre des opérations
suit la même règle que l'ordre de lecture. Plus tard, on apprendra
l'usage des parenthèses. Enfin, on étudiera le concept d'associativité.
Quand je lis :
a - b - c
ça fait bien ce que ça dit, et ça dit :
(a - b) - c
et non pas
a - (b + c)
qui n'est équivalent que dans certains ensembles dont R (je te
l'accorde, c'est le seul ensemble dans lequel on peut travailler avec
les opérateurs de C). Mais même dans R, rien n'impose pas qu'on doive
penser "soustraire le total" plutôt que "soustraire un à un". Question
de contexte.
Que je sorte de l'école primaire ou que je sois Einstein, je sais ce que
fait a - b - c. Ca a le mérite d'être extrêmement lisible, MEME si on a
oublié les cours sur l'associativité, voire les parenthèses. Alors pour
la lisibilité, tu repasseras.
Justement, il n'y a rien de naturel ni de canonique dans tes surjections
(au sens theorie des categories),Ca je ne connais pas. Il y a de vrais théorèmes utiles et pratiques la
dedans?
Un peu, oui. Toute la theorie du typage est basee dessus. Et toutes les
histoires de covariance/contravariance viennent aussi de la.
Tout ca pour demander: est-ce que l'aspect canonique est un truc
réellement important et utile dans les surjections que j'ai exhibé?
Oui, c'est important et utile. Si tu arrives a mettre deux structures
en correspondance, c'est souvent utile de savoir si ta correspondance
est totalement artificielle, ou si c'est quelque chose de plus profond.
A mon avis ca ne doit pas être la même "symétrie" donc tu veux parler.
Est-ce que tu peux m'exhiber de quoi il s'agit au juste quand on parle
de ces symétrie?
Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
En arithmetique classique, la distributivite "separe" + et *.
PS: y a t'il un cours, une présentation succincte, qui explique les
catégories pour les nuls? J'ai tenté de lire:
ca je ne sais pas. On recommande souvent Dana Scott pour la partie typage.
Et "categories for the working mathematician" pour les gens interesses
par le cote mathematique.
Justement, il n'y a rien de naturel ni de canonique dans tes surjections
(au sens theorie des categories),
Ca je ne connais pas. Il y a de vrais théorèmes utiles et pratiques la
dedans?
Un peu, oui. Toute la theorie du typage est basee dessus. Et toutes les
histoires de covariance/contravariance viennent aussi de la.
Tout ca pour demander: est-ce que l'aspect canonique est un truc
réellement important et utile dans les surjections que j'ai exhibé?
Oui, c'est important et utile. Si tu arrives a mettre deux structures
en correspondance, c'est souvent utile de savoir si ta correspondance
est totalement artificielle, ou si c'est quelque chose de plus profond.
A mon avis ca ne doit pas être la même "symétrie" donc tu veux parler.
Est-ce que tu peux m'exhiber de quoi il s'agit au juste quand on parle
de ces symétrie?
Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
En arithmetique classique, la distributivite "separe" + et *.
PS: y a t'il un cours, une présentation succincte, qui explique les
catégories pour les nuls? J'ai tenté de lire:
ca je ne sais pas. On recommande souvent Dana Scott pour la partie typage.
Et "categories for the working mathematician" pour les gens interesses
par le cote mathematique.
Justement, il n'y a rien de naturel ni de canonique dans tes surjections
(au sens theorie des categories),Ca je ne connais pas. Il y a de vrais théorèmes utiles et pratiques la
dedans?
Un peu, oui. Toute la theorie du typage est basee dessus. Et toutes les
histoires de covariance/contravariance viennent aussi de la.
Tout ca pour demander: est-ce que l'aspect canonique est un truc
réellement important et utile dans les surjections que j'ai exhibé?
Oui, c'est important et utile. Si tu arrives a mettre deux structures
en correspondance, c'est souvent utile de savoir si ta correspondance
est totalement artificielle, ou si c'est quelque chose de plus profond.
A mon avis ca ne doit pas être la même "symétrie" donc tu veux parler.
Est-ce que tu peux m'exhiber de quoi il s'agit au juste quand on parle
de ces symétrie?
Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
En arithmetique classique, la distributivite "separe" + et *.
PS: y a t'il un cours, une présentation succincte, qui explique les
catégories pour les nuls? J'ai tenté de lire:
ca je ne sais pas. On recommande souvent Dana Scott pour la partie typage.
Et "categories for the working mathematician" pour les gens interesses
par le cote mathematique.
Le 07/09/2010 01:53, Marc Espie a écrit :Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
Heu? je suis largué. Quelles règles?En arithmetique classique, la distributivite "separe" + et *.
Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b) & c = (a & c) | (b & c)
(a + b) * c = (a * c) + (b * c)
Les deux jeux d'opérations ont l'air vraiment très similaires.
Il n'y a pas un argument qui tue issu de la théorie des catégorie qui
montre que c'est vraiment pas la même chose? Car pour l'instant plus on
avance, et plus je trouve (bool, |, &) similaire à "(N, +, *) modulo
'n'est pas nul'".
Le 07/09/2010 01:53, Marc Espie a écrit :
Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
Heu? je suis largué. Quelles règles?
En arithmetique classique, la distributivite "separe" + et *.
Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b) & c = (a & c) | (b & c)
(a + b) * c = (a * c) + (b * c)
Les deux jeux d'opérations ont l'air vraiment très similaires.
Il n'y a pas un argument qui tue issu de la théorie des catégorie qui
montre que c'est vraiment pas la même chose? Car pour l'instant plus on
avance, et plus je trouve (bool, |, &) similaire à "(N, +, *) modulo
'n'est pas nul'".
Le 07/09/2010 01:53, Marc Espie a écrit :Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
Heu? je suis largué. Quelles règles?En arithmetique classique, la distributivite "separe" + et *.
Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b) & c = (a & c) | (b & c)
(a + b) * c = (a * c) + (b * c)
Les deux jeux d'opérations ont l'air vraiment très similaires.
Il n'y a pas un argument qui tue issu de la théorie des catégorie qui
montre que c'est vraiment pas la même chose? Car pour l'instant plus on
avance, et plus je trouve (bool, |, &) similaire à "(N, +, *) modulo
'n'est pas nul'".
Le 07/09/2010 01:53, Marc Espie a écrit :Justement, il n'y a rien de naturel ni de canonique dans tes surjections
(au sens theorie des categories),Ca je ne connais pas. Il y a de vrais théorèmes utiles et pratiques la
dedans?Un peu, oui. Toute la theorie du typage est basee dessus. Et toutes les
histoires de covariance/contravariance viennent aussi de la.
ah? Il faut bien baser les types sur une théorie, ca fait plus sérieux,
quitte à ce que la théorie soit celle du "grand tout et n'importe quoi" :)
Plus sérieusement, cela a l'air d'avoir rapport avec l'inférence de
types des compilo scala, camel et consors. C'est donc plus vraiment des
maths, mais du formalisme informatique trop puissant pour le commun des
programmeurs. En tout cas ca nous éloigne complètement du C et des
évaluations booléennes.
A mon avis ca ne doit pas être la même "symétrie" donc tu veux parler.
Est-ce que tu peux m'exhiber de quoi il s'agit au juste quand on parle
de ces symétrie?
Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
Heu? je suis largué. Quelles règles?En arithmetique classique, la distributivite "separe" + et *.
Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b) & c = (a & c) | (b & c)
(a + b) * c = (a * c) + (b * c)
Une chose est sure, les théorèmes de cette théorie ne sont pas encore
dans la culture générale.
Le 07/09/2010 01:53, Marc Espie a écrit :
Justement, il n'y a rien de naturel ni de canonique dans tes surjections
(au sens theorie des categories),
Ca je ne connais pas. Il y a de vrais théorèmes utiles et pratiques la
dedans?
Un peu, oui. Toute la theorie du typage est basee dessus. Et toutes les
histoires de covariance/contravariance viennent aussi de la.
ah? Il faut bien baser les types sur une théorie, ca fait plus sérieux,
quitte à ce que la théorie soit celle du "grand tout et n'importe quoi" :)
Plus sérieusement, cela a l'air d'avoir rapport avec l'inférence de
types des compilo scala, camel et consors. C'est donc plus vraiment des
maths, mais du formalisme informatique trop puissant pour le commun des
programmeurs. En tout cas ca nous éloigne complètement du C et des
évaluations booléennes.
A mon avis ca ne doit pas être la même "symétrie" donc tu veux parler.
Est-ce que tu peux m'exhiber de quoi il s'agit au juste quand on parle
de ces symétrie?
Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
Heu? je suis largué. Quelles règles?
En arithmetique classique, la distributivite "separe" + et *.
Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b) & c = (a & c) | (b & c)
(a + b) * c = (a * c) + (b * c)
Une chose est sure, les théorèmes de cette théorie ne sont pas encore
dans la culture générale.
Le 07/09/2010 01:53, Marc Espie a écrit :Justement, il n'y a rien de naturel ni de canonique dans tes surjections
(au sens theorie des categories),Ca je ne connais pas. Il y a de vrais théorèmes utiles et pratiques la
dedans?Un peu, oui. Toute la theorie du typage est basee dessus. Et toutes les
histoires de covariance/contravariance viennent aussi de la.
ah? Il faut bien baser les types sur une théorie, ca fait plus sérieux,
quitte à ce que la théorie soit celle du "grand tout et n'importe quoi" :)
Plus sérieusement, cela a l'air d'avoir rapport avec l'inférence de
types des compilo scala, camel et consors. C'est donc plus vraiment des
maths, mais du formalisme informatique trop puissant pour le commun des
programmeurs. En tout cas ca nous éloigne complètement du C et des
évaluations booléennes.
A mon avis ca ne doit pas être la même "symétrie" donc tu veux parler.
Est-ce que tu peux m'exhiber de quoi il s'agit au juste quand on parle
de ces symétrie?
Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
Heu? je suis largué. Quelles règles?En arithmetique classique, la distributivite "separe" + et *.
Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b) & c = (a & c) | (b & c)
(a + b) * c = (a * c) + (b * c)
Une chose est sure, les théorèmes de cette théorie ne sont pas encore
dans la culture générale.
Samuel DEVULDER wrote:Le 07/09/2010 01:53, Marc Espie a écrit :Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
Heu? je suis largué. Quelles règles?En arithmetique classique, la distributivite "separe" + et *.
Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b)& c = (a& c) | (b& c)
(a + b) * c = (a * c) + (b * c)
Les deux jeux d'opérations ont l'air vraiment très similaires.
et "&" se distribue par rapport à "|" alors que pas "*" par rapport à "+".
(je garde ta formulation, même si elle me semble étrange)
Il n'y a pas un argument qui tue issu de la théorie des catégorie qui
montre que c'est vraiment pas la même chose? Car pour l'instant plus on
avance, et plus je trouve (bool, |,&) similaire à "(N, +, *) modulo
'n'est pas nul'".
et (bool,&,|) modulo "est nul".
Alors lequel choisir...
Samuel DEVULDER wrote:
Le 07/09/2010 01:53, Marc Espie a écrit :
Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
Heu? je suis largué. Quelles règles?
En arithmetique classique, la distributivite "separe" + et *.
Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b)& c = (a& c) | (b& c)
(a + b) * c = (a * c) + (b * c)
Les deux jeux d'opérations ont l'air vraiment très similaires.
et "&" se distribue par rapport à "|" alors que pas "*" par rapport à "+".
(je garde ta formulation, même si elle me semble étrange)
Il n'y a pas un argument qui tue issu de la théorie des catégorie qui
montre que c'est vraiment pas la même chose? Car pour l'instant plus on
avance, et plus je trouve (bool, |,&) similaire à "(N, +, *) modulo
'n'est pas nul'".
et (bool,&,|) modulo "est nul".
Alors lequel choisir...
Samuel DEVULDER wrote:Le 07/09/2010 01:53, Marc Espie a écrit :Dans une algebre de Boole,& et | obeissent exactement aux memes regles.
Heu? je suis largué. Quelles règles?En arithmetique classique, la distributivite "separe" + et *.
Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b)& c = (a& c) | (b& c)
(a + b) * c = (a * c) + (b * c)
Les deux jeux d'opérations ont l'air vraiment très similaires.
et "&" se distribue par rapport à "|" alors que pas "*" par rapport à "+".
(je garde ta formulation, même si elle me semble étrange)
Il n'y a pas un argument qui tue issu de la théorie des catégorie qui
montre que c'est vraiment pas la même chose? Car pour l'instant plus on
avance, et plus je trouve (bool, |,&) similaire à "(N, +, *) modulo
'n'est pas nul'".
et (bool,&,|) modulo "est nul".
Alors lequel choisir...
In article<4c86b5c7$0$22645$,
Samuel DEVULDER wrote:Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b)& c = (a& c) | (b& c)
(a + b) * c = (a * c) + (b * c)
Ben par exemple, (a& b) | c = (a | c)& (b | c)
(oui, c'est distributif aussi dans ce sens)
Du coup, qui de | et de& va jouer le role de l'addition.
Ton morphisme n'est pas naturel.
Une chose est sure, les théorèmes de cette théorie ne sont pas encore
dans la culture générale.
Rien de scientifique n'est vraiment dans la culture generale, jette un oeil
a un Trivial Pursuit si tu ne me crois pas ;(
In article<4c86b5c7$0$22645$426a34cc@news.free.fr>,
Samuel DEVULDER<samuel-dot-devulder@laposte-dot-com> wrote:
Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b)& c = (a& c) | (b& c)
(a + b) * c = (a * c) + (b * c)
Ben par exemple, (a& b) | c = (a | c)& (b | c)
(oui, c'est distributif aussi dans ce sens)
Du coup, qui de | et de& va jouer le role de l'addition.
Ton morphisme n'est pas naturel.
Une chose est sure, les théorèmes de cette théorie ne sont pas encore
dans la culture générale.
Rien de scientifique n'est vraiment dans la culture generale, jette un oeil
a un Trivial Pursuit si tu ne me crois pas ;(
In article<4c86b5c7$0$22645$,
Samuel DEVULDER wrote:Heu (bis)? Il me semble que "|" se distribue par rapport à "&" de la
même façon que "+" par rapport à "*":
(a | b)& c = (a& c) | (b& c)
(a + b) * c = (a * c) + (b * c)
Ben par exemple, (a& b) | c = (a | c)& (b | c)
(oui, c'est distributif aussi dans ce sens)
Du coup, qui de | et de& va jouer le role de l'addition.
Ton morphisme n'est pas naturel.
Une chose est sure, les théorèmes de cette théorie ne sont pas encore
dans la culture générale.
Rien de scientifique n'est vraiment dans la culture generale, jette un oeil
a un Trivial Pursuit si tu ne me crois pas ;(
Le Tue, 07 Sep 2010 22:27:03 +0200,
Alexandre Bacquart écrivait :On 09/06/2010 03:09 PM, JKB wrote:C'est dans ce cas qu'il faut mettre des parenthèses pour la lisibilité du
code.
Et tu parles de troll... tu dis que :
a - b - c
est moins lisible que :
a - (b + c)
C'est faux ! La deuxième expression dit, en substance, qu'il faut
"strictement faire d'abord l'opération de droite puis ensuite celle de
gauche", l'inverse de ce qu'on fait de manière naturelle.
Je me contrefiche de savoir ce qu'on fait naturellement. Dans
certains langages, le choix du sens d'évaluation est laissé à la
discrétion du compilo. Si tu ne fais que du C, ça ne te posera aucun
problème. Si tu mélanges les langages, c'est une source d'erreurs. Tous
les gens que j'ai croisé et qui prétendaient le contraire ont fini
par se tirer une balle dans le pied avec des choses pareilles parce
qu'un jour où tu es un peu plus mal réveillé, tu codes en C comme tu
le fais en Fortran. Mais tu fais ce que tu veux.
Et je continue à prétendre que du point de vue de la stricte
lisibilité a-(b+c) est plus clair que a-b-c.Mais il y a des contextes où le schéma de pensée est, strictement, la
soustraction de b, puis la soustraction de c. Dans ces contextes, c'est
ce qu'on appelle du code auto-documenté. Le remplacer par ta version
soit-disant lisible, cela revient à mentir au lecteur.
Et c'est une connerie. Si on évalue une expression dans un ordre
précis pour une raison précise, on y adjoint un commentaire.
Je ne crois pas en ce genre de code autodocumenté.
Maintenant, imagine qu'on récupère ce contexte dans un autre langage
fortement typé (au hasard, C++) et qu'on veuille changer les types de
l'expression par des types dont la soustraction EST associative (au
hasard, des quaternions). Le mensonge touchera aussi le compilateur et
se transformera en erreur non détectée (pour peu qu'il implémente aussi
l'addition pour ce type, ce qui est généralement le cas si la
soustraction existe), et ça, c'est bien plus grave.
Hors de contexte. On parle de C et d'entiers ou de flottants. > Jamais on n'a évoqué un cas où la soustraction n'était pas associative.
On a beau jeu de dire que l'associativité se fait de gauche à droite.
C'est toi qui le dit ! Ne t'en déplaise, la clé, c'est qu'on apprend
d'abord à lire de gauche à droite (en occident du moins c'est très
répandu), ensuite on apprend qu'en mathématiques, l'ordre des opérations
suit la même règle que l'ordre de lecture. Plus tard, on apprendra
l'usage des parenthèses. Enfin, on étudiera le concept d'associativité.
Quand je lis :
a - b - c
ça fait bien ce que ça dit, et ça dit :
(a - b) - c
et non pas
a - (b + c)
qui n'est équivalent que dans certains ensembles dont R (je te
l'accorde, c'est le seul ensemble dans lequel on peut travailler avec
les opérateurs de C). Mais même dans R, rien n'impose pas qu'on doive
penser "soustraire le total" plutôt que "soustraire un à un". Question
de contexte.
Que je sorte de l'école primaire ou que je sois Einstein, je sais ce que
fait a - b - c. Ca a le mérite d'être extrêmement lisible, MEME si on a
oublié les cours sur l'associativité, voire les parenthèses. Alors pour
la lisibilité, tu repasseras.
Tu fais ce que tu veux, personnellement, je m'en contrefiche. Je
mets toujours des parenthèses dès que les opérations ne sont pas
commutatives pour plusieurs raisons : forcer l'ordre d'évaluation et
rendre la chose plus lisible ne t'en déplaise.
Le Tue, 07 Sep 2010 22:27:03 +0200,
Alexandre Bacquart<tek512@free.DELETEME.fr> écrivait :
On 09/06/2010 03:09 PM, JKB wrote:
C'est dans ce cas qu'il faut mettre des parenthèses pour la lisibilité du
code.
Et tu parles de troll... tu dis que :
a - b - c
est moins lisible que :
a - (b + c)
C'est faux ! La deuxième expression dit, en substance, qu'il faut
"strictement faire d'abord l'opération de droite puis ensuite celle de
gauche", l'inverse de ce qu'on fait de manière naturelle.
Je me contrefiche de savoir ce qu'on fait naturellement. Dans
certains langages, le choix du sens d'évaluation est laissé à la
discrétion du compilo. Si tu ne fais que du C, ça ne te posera aucun
problème. Si tu mélanges les langages, c'est une source d'erreurs. Tous
les gens que j'ai croisé et qui prétendaient le contraire ont fini
par se tirer une balle dans le pied avec des choses pareilles parce
qu'un jour où tu es un peu plus mal réveillé, tu codes en C comme tu
le fais en Fortran. Mais tu fais ce que tu veux.
Et je continue à prétendre que du point de vue de la stricte
lisibilité a-(b+c) est plus clair que a-b-c.
Mais il y a des contextes où le schéma de pensée est, strictement, la
soustraction de b, puis la soustraction de c. Dans ces contextes, c'est
ce qu'on appelle du code auto-documenté. Le remplacer par ta version
soit-disant lisible, cela revient à mentir au lecteur.
Et c'est une connerie. Si on évalue une expression dans un ordre
précis pour une raison précise, on y adjoint un commentaire.
Je ne crois pas en ce genre de code autodocumenté.
Maintenant, imagine qu'on récupère ce contexte dans un autre langage
fortement typé (au hasard, C++) et qu'on veuille changer les types de
l'expression par des types dont la soustraction EST associative (au
hasard, des quaternions). Le mensonge touchera aussi le compilateur et
se transformera en erreur non détectée (pour peu qu'il implémente aussi
l'addition pour ce type, ce qui est généralement le cas si la
soustraction existe), et ça, c'est bien plus grave.
Hors de contexte. On parle de C et d'entiers ou de flottants. > Jamais on n'a évoqué un cas où la soustraction n'était pas associative.
On a beau jeu de dire que l'associativité se fait de gauche à droite.
C'est toi qui le dit ! Ne t'en déplaise, la clé, c'est qu'on apprend
d'abord à lire de gauche à droite (en occident du moins c'est très
répandu), ensuite on apprend qu'en mathématiques, l'ordre des opérations
suit la même règle que l'ordre de lecture. Plus tard, on apprendra
l'usage des parenthèses. Enfin, on étudiera le concept d'associativité.
Quand je lis :
a - b - c
ça fait bien ce que ça dit, et ça dit :
(a - b) - c
et non pas
a - (b + c)
qui n'est équivalent que dans certains ensembles dont R (je te
l'accorde, c'est le seul ensemble dans lequel on peut travailler avec
les opérateurs de C). Mais même dans R, rien n'impose pas qu'on doive
penser "soustraire le total" plutôt que "soustraire un à un". Question
de contexte.
Que je sorte de l'école primaire ou que je sois Einstein, je sais ce que
fait a - b - c. Ca a le mérite d'être extrêmement lisible, MEME si on a
oublié les cours sur l'associativité, voire les parenthèses. Alors pour
la lisibilité, tu repasseras.
Tu fais ce que tu veux, personnellement, je m'en contrefiche. Je
mets toujours des parenthèses dès que les opérations ne sont pas
commutatives pour plusieurs raisons : forcer l'ordre d'évaluation et
rendre la chose plus lisible ne t'en déplaise.
Le Tue, 07 Sep 2010 22:27:03 +0200,
Alexandre Bacquart écrivait :On 09/06/2010 03:09 PM, JKB wrote:C'est dans ce cas qu'il faut mettre des parenthèses pour la lisibilité du
code.
Et tu parles de troll... tu dis que :
a - b - c
est moins lisible que :
a - (b + c)
C'est faux ! La deuxième expression dit, en substance, qu'il faut
"strictement faire d'abord l'opération de droite puis ensuite celle de
gauche", l'inverse de ce qu'on fait de manière naturelle.
Je me contrefiche de savoir ce qu'on fait naturellement. Dans
certains langages, le choix du sens d'évaluation est laissé à la
discrétion du compilo. Si tu ne fais que du C, ça ne te posera aucun
problème. Si tu mélanges les langages, c'est une source d'erreurs. Tous
les gens que j'ai croisé et qui prétendaient le contraire ont fini
par se tirer une balle dans le pied avec des choses pareilles parce
qu'un jour où tu es un peu plus mal réveillé, tu codes en C comme tu
le fais en Fortran. Mais tu fais ce que tu veux.
Et je continue à prétendre que du point de vue de la stricte
lisibilité a-(b+c) est plus clair que a-b-c.Mais il y a des contextes où le schéma de pensée est, strictement, la
soustraction de b, puis la soustraction de c. Dans ces contextes, c'est
ce qu'on appelle du code auto-documenté. Le remplacer par ta version
soit-disant lisible, cela revient à mentir au lecteur.
Et c'est une connerie. Si on évalue une expression dans un ordre
précis pour une raison précise, on y adjoint un commentaire.
Je ne crois pas en ce genre de code autodocumenté.
Maintenant, imagine qu'on récupère ce contexte dans un autre langage
fortement typé (au hasard, C++) et qu'on veuille changer les types de
l'expression par des types dont la soustraction EST associative (au
hasard, des quaternions). Le mensonge touchera aussi le compilateur et
se transformera en erreur non détectée (pour peu qu'il implémente aussi
l'addition pour ce type, ce qui est généralement le cas si la
soustraction existe), et ça, c'est bien plus grave.
Hors de contexte. On parle de C et d'entiers ou de flottants. > Jamais on n'a évoqué un cas où la soustraction n'était pas associative.
On a beau jeu de dire que l'associativité se fait de gauche à droite.
C'est toi qui le dit ! Ne t'en déplaise, la clé, c'est qu'on apprend
d'abord à lire de gauche à droite (en occident du moins c'est très
répandu), ensuite on apprend qu'en mathématiques, l'ordre des opérations
suit la même règle que l'ordre de lecture. Plus tard, on apprendra
l'usage des parenthèses. Enfin, on étudiera le concept d'associativité.
Quand je lis :
a - b - c
ça fait bien ce que ça dit, et ça dit :
(a - b) - c
et non pas
a - (b + c)
qui n'est équivalent que dans certains ensembles dont R (je te
l'accorde, c'est le seul ensemble dans lequel on peut travailler avec
les opérateurs de C). Mais même dans R, rien n'impose pas qu'on doive
penser "soustraire le total" plutôt que "soustraire un à un". Question
de contexte.
Que je sorte de l'école primaire ou que je sois Einstein, je sais ce que
fait a - b - c. Ca a le mérite d'être extrêmement lisible, MEME si on a
oublié les cours sur l'associativité, voire les parenthèses. Alors pour
la lisibilité, tu repasseras.
Tu fais ce que tu veux, personnellement, je m'en contrefiche. Je
mets toujours des parenthèses dès que les opérations ne sont pas
commutatives pour plusieurs raisons : forcer l'ordre d'évaluation et
rendre la chose plus lisible ne t'en déplaise.
Si j'ai bien compris ton idée, tu dis qu'on pourrait avoir un
compilateur qui teste le débordement entier (histoire de montrer que
cela ne s'arrête pas aux flottants ;-)) pour a-b quand on met les
parenthèses, mais qui ne le testerait pas sans les parenthèses.
Résultat, a=INT_MAX, b=-1, c00 fait sauter la banque dans le deuxième
cas mais pas dans le premier.
Si j'ai bien compris ton idée, tu dis qu'on pourrait avoir un
compilateur qui teste le débordement entier (histoire de montrer que
cela ne s'arrête pas aux flottants ;-)) pour a-b quand on met les
parenthèses, mais qui ne le testerait pas sans les parenthèses.
Résultat, a=INT_MAX, b=-1, c00 fait sauter la banque dans le deuxième
cas mais pas dans le premier.
Si j'ai bien compris ton idée, tu dis qu'on pourrait avoir un
compilateur qui teste le débordement entier (histoire de montrer que
cela ne s'arrête pas aux flottants ;-)) pour a-b quand on met les
parenthèses, mais qui ne le testerait pas sans les parenthèses.
Résultat, a=INT_MAX, b=-1, c00 fait sauter la banque dans le deuxième
cas mais pas dans le premier.