Je dois implémenter une boucle idefinite avec plusieurs points de sortie. Malheureusement, la solution la plus évidente - REPEAT - JUSQU'à plusieurs WHILE ne fonctionne pas dans Gforth ni dans swapforth (Bien sûr, la boucle dans l'exemple ci-dessous peut être implémentée avec DO-LOOP, mais ce n'est qu'une démonstration. le vrai problème est lié au contrôle du matériel dans un système embarqué, de sorte que la boucle doit en effet être indéfinie):Forth: boucle indéfinie portable avec plusieurs points de sortie
: test1 (step -- step count)
0
begin
over +
dup .
dup 20 < while
dup 13 = while
repeat
;
3 test1
dans « Penser Forth » il y a la déclaration de Moore cité:
Plusieurs fois conditionals sont utilisés pour sortir des boucles. Cette utilisation particulière peut être évitée en ayant des boucles avec plusieurs points de sortie. C'est un sujet en direct, en raison de la construction multiple WHILE qui est en poly-Forth mais n'a pas percolé jusqu'à Forth '83. C'est un moyen simple de définir plusieurs WHILEs dans le même REPEAT . Aussi Dean Sanderson [of Forth, Inc.] a inventé une nouvelle construction qui introduit deux points de sortie à une DO LOOP. Étant donné cette construction, vous aurez moins de tests.
Malheureusement, je n'ai pas réussi à trouver la solution de Dean. Existe-t-il un moyen portable d'implémenter plusieurs points de sortie dans la boucle indéfinie dans Forth?
BTW, plusieurs 'WHILE' fonctionne dans n'importe quel ANS Forth - il doit simplement être résolu avec un autre' THEN', [un exemple] (https://forth-standard.org/standard/core/WHILE) est fourni même dans la norme. – ruvim
Merci pour votre commentaire, en effet il y a une telle option. Je l'ai testé avec plus de deux WHILE et cela fonctionne. Cependant il semble qu'il soit plus difficile d'assigner des actions pour différentes raisons de quitter la boucle. J'ai créé la réponse montrant cette solution. – wzab