In article <20100907131151$,
Vincent Lefevre wrote:
>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.
Je viens de verifier, difficile a retrouver, mais:
5.1.2.3 13 et 14 EXAMPLE 5 et 6
a - b - c et (a - b) - c sont equivalents.
In article <20100907131151$22f3@prunille.vinc17.org>,
Vincent Lefevre <vincent-news@vinc17.net> wrote:
>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.
Je viens de verifier, difficile a retrouver, mais:
5.1.2.3 13 et 14 EXAMPLE 5 et 6
a - b - c et (a - b) - c sont equivalents.
In article <20100907131151$,
Vincent Lefevre wrote:
>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.
Je viens de verifier, difficile a retrouver, mais:
5.1.2.3 13 et 14 EXAMPLE 5 et 6
a - b - c et (a - b) - c sont equivalents.
Ben si je compare:
(a & b) | c = (a | c) & (b | c)
((a * b) + c)' = ((a + c) * (b + c))'
et:
(a | b) & c = (a & c) | (b & c)
((a + b) * c)' = ((a * c) + (b * c))'
Il me semble que c'est clair. "|" se map sur "+" et "&" sur "*" de façon
évidente, je dirais naturelle.
Ben si je compare:
et:
Ben si je compare:
(a & b) | c = (a | c) & (b | c)
((a * b) + c)' = ((a + c) * (b + c))'
et:
(a | b) & c = (a & c) | (b & c)
((a + b) * c)' = ((a * c) + (b * c))'
Il me semble que c'est clair. "|" se map sur "+" et "&" sur "*" de façon
évidente, je dirais naturelle.
Ben si je compare:
et:
Ben si je compare:
(a & b) | c = (a | c) & (b | c)
((a * b) + c)' = ((a + c) * (b + c))'
et:
(a | b) & c = (a & c) | (b & c)
((a + b) * c)' = ((a * c) + (b * c))'
Il me semble que c'est clair. "|" se map sur "+" et "&" sur "*" de façon
évidente, je dirais naturelle.
Ben si je compare:
et:
Sans parler de comportement indéfini, il y a aussi la contraction
d'expressions flottantes qui peut introduire des différences.
Sans parler de comportement indéfini, il y a aussi la contraction
d'expressions flottantes qui peut introduire des différences.
Sans parler de comportement indéfini, il y a aussi la contraction
d'expressions flottantes qui peut introduire des différences.
On 09/07/2010 10:50 PM, JKB wrote: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.
x = a - b - c; // soustraire b à a, puis soustraire c
est un commentaire aussi utile que :
if (x > 42) // si x est supérieur à 42
Je ne crois pas en ce genre de code autodocumenté.
Si je veux dire à mon compilateur C de soustraire b puis de soustraire
c, j'écris -b-c. Le lecteur C ne peut que comprendre ce que j'ai voulu
dire, c'est toi qui cherche à transformer ce que je veux exprimer en
"soustraire la somme de b et c". Me fiche de savoir que c'est équivalent
dans R, ce n'est tout simplement plus la même expression.
C'est un des principes que j'applique pour l'auto-documentation de mon
code. Et en principe, je sais toujours dans quel langage je suis quand
mon debugger affiche du code.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.
C'est très typique du troll de crier hors-sujet quand on parle de C++
pour lui donner un exemple, alors qu'il n'hésite pas à évoquer le
beaucoup plus lointain Fortran pour se justifier par ailleurs.
Mais à la base, c'est quand-même toi qui est hors-sujet avec ta
conception de la lisibilité.
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.
Bon sang, si ce n'était qu'une question de parenthèses, j'admettrais
volontiers être le troll, mais pourquoi alors ne pas simplement écrire :
(a - b) - c
C'est moins clair ?!
Je ne serais pas intervenu si tu avais écris ça. Ca
ne mériterait même pas un débat. Moi aussi j'utilise des parenthèses
pour faciliter la lecture, mais toi tu changes carrément l'expression
(et par dessus le marché, l'équivalence est strictement fausse en C car
on est dans un sous-ensemble fini de R, pas dans R, et avec ça ce
sous-ensemble peut changer d'une implémentation à l'autre) ! Moi aussi
je fais souvent :
(a == b) && (c == d)
plutôt que :
a == b && c == d
Ou encore :
(a & b) || (c & d) || (e & f)
plutôt que :
a & b || c & d || e & f
A partir du moment où ça ne change pas l'expression et que ça clarifie
le code, je n'y vois aucun inconvénient et je le pratique même. A la
limite, je changerais l'expression si elle implique une optimisation
(comme multiplier par 1/x pour diviser par x plusieurs fois, ou mettre
ton (b + c) dans une variable pour faire la soustraction plusieurs
fois), mais pas parce-que c'est cool d'être formel combiné à une règle
d'associativité qu'on doit aux mathématiques (les vraies, avec R infini)
et non pas au langage et ses pathétiques sous-ensembles aux débordements
indéfinis. Mauvaise raison si on veut simplement dire *soustraire b puis
soustraire c*, qu'on écrira alors a-b-c ou (a-b)-c si on est un maniaque
des parenthèses. Les deux me vont. Comme tu le dis si bien, chacun fait
ce qu'il veut, ça implique donc que chacun s'exprime comme il veut.
On 09/07/2010 10:50 PM, JKB wrote:
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.
x = a - b - c; // soustraire b à a, puis soustraire c
est un commentaire aussi utile que :
if (x > 42) // si x est supérieur à 42
Je ne crois pas en ce genre de code autodocumenté.
Si je veux dire à mon compilateur C de soustraire b puis de soustraire
c, j'écris -b-c. Le lecteur C ne peut que comprendre ce que j'ai voulu
dire, c'est toi qui cherche à transformer ce que je veux exprimer en
"soustraire la somme de b et c". Me fiche de savoir que c'est équivalent
dans R, ce n'est tout simplement plus la même expression.
C'est un des principes que j'applique pour l'auto-documentation de mon
code. Et en principe, je sais toujours dans quel langage je suis quand
mon debugger affiche du code.
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.
C'est très typique du troll de crier hors-sujet quand on parle de C++
pour lui donner un exemple, alors qu'il n'hésite pas à évoquer le
beaucoup plus lointain Fortran pour se justifier par ailleurs.
Mais à la base, c'est quand-même toi qui est hors-sujet avec ta
conception de la lisibilité.
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.
Bon sang, si ce n'était qu'une question de parenthèses, j'admettrais
volontiers être le troll, mais pourquoi alors ne pas simplement écrire :
(a - b) - c
C'est moins clair ?!
Je ne serais pas intervenu si tu avais écris ça. Ca
ne mériterait même pas un débat. Moi aussi j'utilise des parenthèses
pour faciliter la lecture, mais toi tu changes carrément l'expression
(et par dessus le marché, l'équivalence est strictement fausse en C car
on est dans un sous-ensemble fini de R, pas dans R, et avec ça ce
sous-ensemble peut changer d'une implémentation à l'autre) ! Moi aussi
je fais souvent :
(a == b) && (c == d)
plutôt que :
a == b && c == d
Ou encore :
(a & b) || (c & d) || (e & f)
plutôt que :
a & b || c & d || e & f
A partir du moment où ça ne change pas l'expression et que ça clarifie
le code, je n'y vois aucun inconvénient et je le pratique même. A la
limite, je changerais l'expression si elle implique une optimisation
(comme multiplier par 1/x pour diviser par x plusieurs fois, ou mettre
ton (b + c) dans une variable pour faire la soustraction plusieurs
fois), mais pas parce-que c'est cool d'être formel combiné à une règle
d'associativité qu'on doit aux mathématiques (les vraies, avec R infini)
et non pas au langage et ses pathétiques sous-ensembles aux débordements
indéfinis. Mauvaise raison si on veut simplement dire *soustraire b puis
soustraire c*, qu'on écrira alors a-b-c ou (a-b)-c si on est un maniaque
des parenthèses. Les deux me vont. Comme tu le dis si bien, chacun fait
ce qu'il veut, ça implique donc que chacun s'exprime comme il veut.
On 09/07/2010 10:50 PM, JKB wrote: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.
x = a - b - c; // soustraire b à a, puis soustraire c
est un commentaire aussi utile que :
if (x > 42) // si x est supérieur à 42
Je ne crois pas en ce genre de code autodocumenté.
Si je veux dire à mon compilateur C de soustraire b puis de soustraire
c, j'écris -b-c. Le lecteur C ne peut que comprendre ce que j'ai voulu
dire, c'est toi qui cherche à transformer ce que je veux exprimer en
"soustraire la somme de b et c". Me fiche de savoir que c'est équivalent
dans R, ce n'est tout simplement plus la même expression.
C'est un des principes que j'applique pour l'auto-documentation de mon
code. Et en principe, je sais toujours dans quel langage je suis quand
mon debugger affiche du code.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.
C'est très typique du troll de crier hors-sujet quand on parle de C++
pour lui donner un exemple, alors qu'il n'hésite pas à évoquer le
beaucoup plus lointain Fortran pour se justifier par ailleurs.
Mais à la base, c'est quand-même toi qui est hors-sujet avec ta
conception de la lisibilité.
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.
Bon sang, si ce n'était qu'une question de parenthèses, j'admettrais
volontiers être le troll, mais pourquoi alors ne pas simplement écrire :
(a - b) - c
C'est moins clair ?!
Je ne serais pas intervenu si tu avais écris ça. Ca
ne mériterait même pas un débat. Moi aussi j'utilise des parenthèses
pour faciliter la lecture, mais toi tu changes carrément l'expression
(et par dessus le marché, l'équivalence est strictement fausse en C car
on est dans un sous-ensemble fini de R, pas dans R, et avec ça ce
sous-ensemble peut changer d'une implémentation à l'autre) ! Moi aussi
je fais souvent :
(a == b) && (c == d)
plutôt que :
a == b && c == d
Ou encore :
(a & b) || (c & d) || (e & f)
plutôt que :
a & b || c & d || e & f
A partir du moment où ça ne change pas l'expression et que ça clarifie
le code, je n'y vois aucun inconvénient et je le pratique même. A la
limite, je changerais l'expression si elle implique une optimisation
(comme multiplier par 1/x pour diviser par x plusieurs fois, ou mettre
ton (b + c) dans une variable pour faire la soustraction plusieurs
fois), mais pas parce-que c'est cool d'être formel combiné à une règle
d'associativité qu'on doit aux mathématiques (les vraies, avec R infini)
et non pas au langage et ses pathétiques sous-ensembles aux débordements
indéfinis. Mauvaise raison si on veut simplement dire *soustraire b puis
soustraire c*, qu'on écrira alors a-b-c ou (a-b)-c si on est un maniaque
des parenthèses. Les deux me vont. Comme tu le dis si bien, chacun fait
ce qu'il veut, ça implique donc que chacun s'exprime comme il veut.
JKB écrivit :Le 06 Sep 2010 11:06:02 +0200, Jean-Marc Bourguet écrivait :a - b - c ?
a / b / c ?
Je suis plutot de l'avis de Marc, un programmeur qui a besoin de
parentheses sur ces expressions est incompetant dans ce langage. Ce n'est
pas une subtilite.
Ouaips. Sauf que lorsque tu travailles dans plusieurs langages qui
sont orthogonaux, tu vas très vite dans le mur.
Un programmeur qui programme simultanément sur plusieurs langages, ce
n'est pas courant.
JKB écrivit :
Le 06 Sep 2010 11:06:02 +0200, Jean-Marc Bourguet écrivait :
a - b - c ?
a / b / c ?
Je suis plutot de l'avis de Marc, un programmeur qui a besoin de
parentheses sur ces expressions est incompetant dans ce langage. Ce n'est
pas une subtilite.
Ouaips. Sauf que lorsque tu travailles dans plusieurs langages qui
sont orthogonaux, tu vas très vite dans le mur.
Un programmeur qui programme simultanément sur plusieurs langages, ce
n'est pas courant.
JKB écrivit :Le 06 Sep 2010 11:06:02 +0200, Jean-Marc Bourguet écrivait :a - b - c ?
a / b / c ?
Je suis plutot de l'avis de Marc, un programmeur qui a besoin de
parentheses sur ces expressions est incompetant dans ce langage. Ce n'est
pas une subtilite.
Ouaips. Sauf que lorsque tu travailles dans plusieurs langages qui
sont orthogonaux, tu vas très vite dans le mur.
Un programmeur qui programme simultanément sur plusieurs langages, ce
n'est pas courant.
JKB écrivit :Ça ne change rien au fait que des parenthèses dans le cas
a - b - c
pour avoir
a - (b + c)
est largement plus clair.
... et, comme tu l'as toi-même (fort justement) fait remarquer
précédemment, un comportement légèrement différent aux limites
(genre b proche de a, et c très inférieur en magnitude).
Notez que je ne fais qu'insister sur le contenu de mon précédent message
: si le code dépend de la première forme et ne passe pas avec la seconde
(ou vice-versa), il faut rajouter des commentaires pour éviter de se
poser des questions existentielles.
Antoine
JKB écrivit :
Ça ne change rien au fait que des parenthèses dans le cas
a - b - c
pour avoir
a - (b + c)
est largement plus clair.
... et, comme tu l'as toi-même (fort justement) fait remarquer
précédemment, un comportement légèrement différent aux limites
(genre b proche de a, et c très inférieur en magnitude).
Notez que je ne fais qu'insister sur le contenu de mon précédent message
: si le code dépend de la première forme et ne passe pas avec la seconde
(ou vice-versa), il faut rajouter des commentaires pour éviter de se
poser des questions existentielles.
Antoine
JKB écrivit :Ça ne change rien au fait que des parenthèses dans le cas
a - b - c
pour avoir
a - (b + c)
est largement plus clair.
... et, comme tu l'as toi-même (fort justement) fait remarquer
précédemment, un comportement légèrement différent aux limites
(genre b proche de a, et c très inférieur en magnitude).
Notez que je ne fais qu'insister sur le contenu de mon précédent message
: si le code dépend de la première forme et ne passe pas avec la seconde
(ou vice-versa), il faut rajouter des commentaires pour éviter de se
poser des questions existentielles.
Antoine
a - b - c
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.
moindre petite subtilité, ni même une paire de parenthèses qui, soit dit
en passant, rajoutent une autre règle à suivre.
ce qu'on appelle du code auto-documenté.
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).
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),
Que je sorte de l'école primaire [...], je sais ce que fait a - b - c.
a - b - c
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.
moindre petite subtilité, ni même une paire de parenthèses qui, soit dit
en passant, rajoutent une autre règle à suivre.
ce qu'on appelle du code auto-documenté.
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).
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),
Que je sorte de l'école primaire [...], je sais ce que fait a - b - c.
a - b - c
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.
moindre petite subtilité, ni même une paire de parenthèses qui, soit dit
en passant, rajoutent une autre règle à suivre.
ce qu'on appelle du code auto-documenté.
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).
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),
Que je sorte de l'école primaire [...], je sais ce que fait a - b - c.
In article <4c85775f$0$20969$,
Samuel DEVULDER wrote:Le 06/09/2010 23:32, Marc Espie a écrit :In article<4c85518e$0$23248$,
Samuel DEVULDER wrote:Dans les deux cas les surjections sont naturelles au sens où elles
préservent les propriétés et les structures des deux algèbres.
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.
In article <4c85775f$0$20969$426a74cc@news.free.fr>,
Samuel DEVULDER <samuel-dot-devulder@laposte-dot-com> wrote:
Le 06/09/2010 23:32, Marc Espie a écrit :
In article<4c85518e$0$23248$426a74cc@news.free.fr>,
Samuel DEVULDER<samuel-dot-devulder@laposte-dot-com> wrote:
Dans les deux cas les surjections sont naturelles au sens où elles
préservent les propriétés et les structures des deux algèbres.
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.
In article <4c85775f$0$20969$,
Samuel DEVULDER wrote:Le 06/09/2010 23:32, Marc Espie a écrit :In article<4c85518e$0$23248$,
Samuel DEVULDER wrote:Dans les deux cas les surjections sont naturelles au sens où elles
préservent les propriétés et les structures des deux algèbres.
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 :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.
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.
Ah ok.. je comprends mieux. Ca dit juste que "c'est la même chose" et ca
permet aussi de le démontrer formellement. A contrario, j'imagine que ca
permet aussi de dire "pourquoi c'est différent" et par exemple exhiber
un contre exemple qui explique que les deux structures sont distinctes.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)
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'".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.
Ah oui.. Bon je vais voir déjà si je peux trouver des trucs simples qui
montrent en quoi la théorie des catégorie sert. Quels sont ses grands
théorèmes et ce qu'ils traduisent des vérités du mode logique.
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.
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.
Ah ok.. je comprends mieux. Ca dit juste que "c'est la même chose" et ca
permet aussi de le démontrer formellement. A contrario, j'imagine que ca
permet aussi de dire "pourquoi c'est différent" et par exemple exhiber
un contre exemple qui explique que les deux structures sont distinctes.
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)
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'".
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.
Ah oui.. Bon je vais voir déjà si je peux trouver des trucs simples qui
montrent en quoi la théorie des catégorie sert. Quels sont ses grands
théorèmes et ce qu'ils traduisent des vérités du mode logique.
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.
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.
Ah ok.. je comprends mieux. Ca dit juste que "c'est la même chose" et ca
permet aussi de le démontrer formellement. A contrario, j'imagine que ca
permet aussi de dire "pourquoi c'est différent" et par exemple exhiber
un contre exemple qui explique que les deux structures sont distinctes.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)
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'".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.
Ah oui.. Bon je vais voir déjà si je peux trouver des trucs simples qui
montrent en quoi la théorie des catégorie sert. Quels sont ses grands
théorèmes et ce qu'ils traduisent des vérités du mode logique.
Une chose est sure, les théorèmes de cette théorie ne sont pas encore
dans la culture générale.
Le 08/09/2010 00:15, Marc Espie a écrit :Rien de scientifique n'est vraiment dans la culture generale, jette un
oeil a un Trivial Pursuit si tu ne me crois pas ;(
Ca dépend. Il doit bien y avoir des questions sur Pasteur et son vaccin
ou son système de préservation des produits laitiers ou sur la
pénicilline de Flemming.
Le 08/09/2010 00:15, Marc Espie a écrit :
Rien de scientifique n'est vraiment dans la culture generale, jette un
oeil a un Trivial Pursuit si tu ne me crois pas ;(
Ca dépend. Il doit bien y avoir des questions sur Pasteur et son vaccin
ou son système de préservation des produits laitiers ou sur la
pénicilline de Flemming.
Le 08/09/2010 00:15, Marc Espie a écrit :Rien de scientifique n'est vraiment dans la culture generale, jette un
oeil a un Trivial Pursuit si tu ne me crois pas ;(
Ca dépend. Il doit bien y avoir des questions sur Pasteur et son vaccin
ou son système de préservation des produits laitiers ou sur la
pénicilline de Flemming.