[Allegro] Views revisited (nicht ganz so lang)
Anando Eger
a.eger at aneg-dv.de
Mo Mär 31 15:39:19 CEST 2014
Liebe Listenleserinnen und -leser,
Herr Eversberg schrieb u.a.:
> FLEX ist keine Programmiersprache, es sieht nur hier und da so ähnlich
> aus.
???
> Rekursivität bei Aufruf von Unterroutinen gehört zu den Dingen,
> die eine Programmiersprache können muß. FLEX kann das nicht und von
> der Sache her wäre es auch programmtechnisch nur höchst aufwendig zu
> lösen.
Auch wenn Flex keine Programmiersprache sein wollen soll -
Stacks und rekursive Unterprogrammaufrufe kann man trotzdem
verwenden.
Ist zwar etwas tricky, aber funktioniert zuverlässig:
http://www.aneg-dv.de/allegro/modpar/files/mp_stack.flb
Viele Grüße
Anando Eger
-----------------------------------------------------------------
Für die Interessierten hier ein kleines Testprogramm zur
Demonstration:
-----------------------------------------------------------------
var 13 10 32 13 10 "Stacktest: rekursiver UP-Aufruf" 13 10\sho IV
var "Schachteltest_Ende"\perf PushAdr
var "0"\perf Push
jump UP_Schachtel
:Schachteltest_Ende
var "Ausgangsebene erreicht"\sho +IV
end
//---------------------------------------
:UP_Schachtel
perf Pop
z=\if z>15 var " Piep";sho +IV;jump Return
perf Push // nur zum Merken des Wertes für den "Rückweg"
z+1\var z\Z=\perf Push // Parameter für UP
var 13 10\sho +IV
:LLL
if z>0 var " ";sho +IV;z-1;jump LLL
var "+ Ebene " Z0\sho +IV
// rekursiver Aufruf:
var "UP_Schachtel_I"\perf PushAdr
jump UP_Schachtel
:UP_Schachtel_I
perf Pop // für den Rückweg gemerkter Wert
z=\Z=
var 13 10\sho +IV
:RRR
if z>0 var " ";sho +IV;z-1;jump RRR
if Z>0 var "- Ebene " Z0;sho +IV
jump Return
include mp_stack.flb
-----------------------------------------------------------------
Das gleiche noch einaml ohne DEMO-Beiwerk:
-----------------------------------------------------------------
var "Schachteltest_Ende"\perf PushAdr
var "0"\perf Push
jump UP_Schachtel
:Schachteltest_Ende
end
:UP_Schachtel
perf Pop
z=\if z>15 jump Return
z+1\perf Push
var "UP_Schachtel_I"\perf PushAdr
jump UP_Schachtel
:UP_Schachtel_I
jump Return
include mp_stack.flb
Mehr Informationen über die Mailingliste Allegro