: zz begin 1- not until ;
Effectivement, il se peut que ton exemple "fonctionne" dus moins sans planter sur certains forths le mot Until recupere la valeur presente sur la pile donc a la prochaine boucle, elle n'y est plus donc plantage avec un Forth qui controle la pile sinon la valeur utilisee la prochaine fois sera tiree de la ram par exemple, quand tu tape le mot "." (point) pour afficher la derniere valeur de la pile et si celle-ci est vide, tu as un message d'erreur, mais en plus tu as quand meme une valeur affichee... j'espere t'avoir aide,
A+ Francois

-------------------------------------

> dans une boucle begin .. until
> j'ai deux exemple:
> : zz begin 1- not until ;
> : zz begin 1- dup not until drop ;
> > (il parait que le premier n'est pas correcte. Pourquoi? j'ai essayer et ça passe)
et pourquoi faut-il utiliser le deuxième exemple ?

Bonjour à tous, bon, pour faire simple: le premier exemple:

: zz begin 1- not until ; va fonctionner 1 fois au moins.
Si tu l'appelle avec un paramètre non nul 3 zz par exemple, il va se terminer normalement puisque until va consommer le résultat du 3 1- not (-3), et comme cette valeur est non nulle (entier non signé), la boucle s'arrete normalement
par contre si tu fait:
0 zz
le until consomme le 0 (résultat de 0 1- not), et dans ce cas, la boucle reprend, mais comme il n'y a plus rien de 'valide' sur la pile à ce moment-la, ca plante

le 2ème exemple:
: zz begin 1- dup not until drop ;
va fonctionner 1 fois avec un paramètre non nul, 2 fois avec 0 pourquoi?
ben c'est simple:
3 zz
idem que dans le 1er exemple, until va consommer le premier entier non-signé présent (c'est à dire -3), et comme cette valeur est non nulle, la boucle stoppe, et le dernier entier est droppé. si tu fait maintenant 0 zz au premier passage, tu a 0 en haut de la pile (0 1- not = 0), donc la boucle reprend avec le -1 restant sur la pile, et le tour suivant, le until consomme le 1 résultant du 1- not, et s'arrete normalement. Pour résumer: Le 1er exemple est correct si tu l'appelle uniquement avec un parametre non nul. Le 2ème exemple est correcte, quelque soit la paramètre utilisé J'espère avoir été assez clair.
Philippe G.

 

 

-- hautdepage -- page d'accueil --