Schleifen-Tricks: begin-while until-else-then, do? wie

28/04/2015 - 10:07 von djc | Report spam
Hallo,

beim letzen Münchener Treffen hatten wir auch über Tricks mit Schleifen gesprochen, die einen intelligenten Ausstieg aus der Schleife bieten,
z.B.:

: suche ( was wo -- 0 | pos 1 )
begin
passt_nicht?
while
ende?
until ( klasse addr len ) \ beenden, wenn Daten zu Ende
bloed_aktion 0 \ Alles durchsucht, nichts gefunden
else ( klasse addr len xt -1|1 ) \ gefunden
gut_aktion 1
then
;

Das ist übrigens die automatische Einrückung vom emacs24 mit gforth.el

Und jetzt der Teil, den ich vergessen habe: Wie ging das bei do-loop?
Ich poste das gleich nach d.c.l.f., damit auch andere etwas davon haben.

: suche ( was wo -- 0 | pos 1 )
wo_groesse 0 ?DO
passt? IF gut_aktion LEAVE ELSE weitersuchen THEN
LOOP
Und jetzt wie weiter??? DONE paßt nicht und ist auch nicht Standard...
;

Vielen Dank,
Daniel
 

Lesen sie die antworten

#1 Bernd Paysan
28/04/2015 - 22:55 | Warnen spam
djc wrote:ckung vom emacs24 mit gforth.el

Und jetzt der Teil, den ich vergessen habe: Wie ging das bei do-loop?
Ich poste das gleich nach d.c.l.f., damit auch andere etwas davon haben.

: suche ( was wo -- 0 | pos 1 )
wo_groesse 0 ?DO
passt? IF gut_aktion LEAVE ELSE weitersuchen THEN
LOOP
Und jetzt wie weiter??? DONE paßt nicht und ist auch nicht Standard...



: suche ( was wo -- f | pos t )
wo_groesse 0 ?DO
passt? WHILE weitersuchen
LOOP 2drop false ELSE 2drop I unloop true THEN ;

Also: auch hier einfach WHILE nehmen, um aus der Schleife auszusteigen, und
dann nachdem man I nicht mehr braucht, UNLOOP machen.

Bernd Paysan
"If you want it done right, you have to do it yourself"
net2o ID: kQusJzA;7*?t=}1GWr!+0qqp_Cn176t4(dQ*
http://bernd-paysan.de/

Ähnliche fragen