Volker Pohlers <vpohlers@arcor.de> writes:
>Hallo liebe Forthler,
>
>im Zuge der Aufarbeitung von Software für meine alten 8-Bit-Rechner ist
>mir folgender Code zum Anlegen lokaler Variablen aufgefallen:
>
>00 \ lokale Variablen VP-31okt90
>01
>02 DECIMAL
>03
>04 VARIABLE 'LOCAL
>05
>06 : LOCAL ( n -- )
>07 DUP 9 > ABORT" zu viele loka
>08 le Variablen"
>09 2* DUP
>10 [ HIDDEN ] COMPILE BRANCH
>11 [ FORTH ] HERE + 2+ ,
>12 HERE 'LOCAL !
>13 ALLOT ;
>14
>
>00 \ lokale Variablen VP-31okt90
>01
>02 3 WIDTH !
>03
>04 : LOCn ( -- )
>05 HERE 4 + C@ ASCII 0 -
>06 2* 'LOCAL @ +
>07 [COMPILE] LITERAL ;
>08 IMMEDIATE
>09
>10 31 WIDTH !
>11
>
>Screen # 02 -----------------------
>
>00 \ Beispiel 2 VP-31okt90
>01
>02
>03 : 5SWAP2 ( n1 .. n5 -- n5 .. n1)
>04 [ 5 LOCAL ]
>05 LOC0 ! LOC1 ! LOC2 !
>06 LOC3 ! LOC4 !
>07 LOC0 @ LOC1 @ LOC2 @
>08 LOC3 @ LOC4 @ ;
>09
>
>Durch Setzen der gültigen Wortlänge auf 3 werden so im zweiten Screen
>auf einen Schlag die Worte LOC0, LOC1, LOC2, ..., LOC9 definiert.
Eigentlich wurde nur ein Wort LOCn definiert, das auf alle Woerter
matcht, die mit LOC anfangen und 4 Zeichen haben. Und dieses Wort
compiliert etwas anderes, je nachdem, was das vierte Zeichen ist.
>Und nun meine Frage: Funktioniert das auch noch mit modernen FORTH's
Nein, moderne Forths kennen normalerweise WIDTH nicht. Da werden die
Namen immer in voller Laenge abgespeichert.
- anton
--
M. Anton Ertl Some things have to be seen to be believed
anton@mips.complang.tuwien.ac.at Most things have to be believed to be seen
http://www.complang.tuwien.ac.at/anton/home.html