Ah effectivement, c'est bien pratique !
J'ai cependant une incompréhension avec la 2e version et, à mon avis, il y a un problème avec la 3e version :
Pour la première version : (exemple avec { 1 2 0 5 6 0 0 9 })
STREAM met Y = 1, X = 2 dans la pile
Comme 2 n'est pas nul, on inverse X et Y, on ajoute 10 dans la pile : Z = 2, Y = 1, X = 10
On fait le produit XY puis la somme X+Y et on obtient 12
A l'étape suivante STREAM ajoute 0 à la pile : Y = 12, X = 0
Dans ce cas on élimine (DROP) le X, on ajoute 10 dans la pile : Y = 12, X = 10
Puis division et partie entière : X = 1
Tout est
OK
Pour la seconde version :
Je n'arrive pas à utiliser PRG - RUN - DBUG pour suivre pas à pas le programme (à cause du STREAM) donc je ne sais pas si N récupère le résultat précédent ou le nouvel élément de la liste (le résultat précédent étant mis dans Y)
Dans les 2 cas je bloque :
STREAM met Y = 1, X = 2
Imaginons que 2 → N (nouvel élément de la liste)
Ajout de 10 dans la pile Z = 1, Y = 2, X = 10
IF ajoute le résultat dans la pile mais THEN l'enlève, donc sauf erreur de ma part, rien ne bouge...
Comme N n'est pas nul, on fait * puis "+N" ce qui devrait faire 22 or la machine affiche bien 12
Si maintenant STREAM met Y = 1, X = 2
Imaginons que 1 → N (résultat précédent, qui doit être j'imagine la première valeur de la liste)
Ajout de 10 dans la pile Z = 1, Y = 2, X = 10
Comme N n'est pas nul, on fait * puis "+N" ce qui devrait faire 21
Donc je n'arrive pas à suivre la logique du processus...
Pour la 3e version :
Avec SWAP & 10 & PICK on aura 2 | 1 | Y = 10 | X = 2 dans la pile
Comme 2 n'est pas nul, on fait 10 * 2 et ensuite + 1 soit 21
Et effectivement, c'est ce qu'indique la machine. Or ça devrait être 12
Bon là je crois que c'est la version qui ne va pas