C.Ret a écrit :
Mais les structure IF...THEN.... ne sont pas les seules où la position des termes n'est pas claire :
Essayer
0 DO 1 + UNTIL DUP 9 > END
et
0 DO UNTIL 1 + DUP 9 > END
Alors ?
Même logique ... Comme le IF, le UNTIL ne sert amha qu'à améliorer la lisibilité. Je pense que l'interpréteur RPL l'ignore tout simplement.
La logique (et la doc) veut que le test soit entre le UNTIL et le END , mais dans dans les faits ce qui importe c'est "quelle est la valeur logique au _sommet_ de la pile au moment du END ?"
En ce sens la syntaxe << 0 DO 1 + UNTIL DUP 9 > END >> est plus claire. Elle sépare clairement ce qui est dans la boucle et ce qui est dans le test. Mais l'autre proposition marche aussi bien (mais moins claire à la lecture)
Dans la doc il est dit pour DO...UNTIL...END :
"END remove the test result of the stack. If the value is zero,the loop clause is execute again; otherwise the exucution resumes following END" .
END retire le résutat du test du sommet de la pile. Si la valeur est égale à zéro, la boucle s'éxécute de nouveau; sinon le programme se poursuit après le END
En RPL FAUX est zéro , tout autre valeur est VRAI
Juste pour compliquer les choses , en Forth autre langage "de pile" la syntaxe est :
<test> IF <à faire si vrai> ELSE <A faire si faux> THEN;
Ca me semble peu logique.... Je verrai plutot
<test> IF <Si vrai> THEN <Si faux> ELSE;
RPL a bien fait amha de ne pas suivre Forth pour le coup. La syntaxe RPL utilisée comme precrit par la doc me plait bien :
IF <Test> THEN <Si vrai> ELSE <Si faux> END
Même si le IF n'est là que pour la déco !