width-Trick

29/05/2008 - 19:30 von Volker Pohlers | Report spam
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.

Diesen Trick hatte ich vermutlich aus Baranov, Nosdrunov: jasyk fort i
jevo realisazii, Maschinostrojenie, Leningrad, 1988, (in russischer
Sprache).

Und nun meine Frage: Funktioniert das auch noch mit modernen FORTH's
oder ging das nur mit FIG-FORTH und F83? (Sorry, aber das ist mein Stand
- ich hatte die letzten 15 Jahre nicht mit FORTH zu tun).

mfg
Volker
 

Lesen sie die antworten

#1 Bernd Paysan
30/05/2008 - 11:36 | Warnen spam
Volker Pohlers wrote:
Und nun meine Frage: Funktioniert das auch noch mit modernen FORTH's
oder ging das nur mit FIG-FORTH und F83? (Sorry, aber das ist mein Stand
- ich hatte die letzten 15 Jahre nicht mit FORTH zu tun).



Das geht wohl nicht mit moderneren Forths. Dafür haben die bereits eine
brauchbare Local-Syntax (also nicht einfach nur Nummern).

: 5swap { a b c d e } e d c b a ;

Bernd Paysan
"If you want it done right, you have to do it yourself"
http://www.jwdt.com/~paysan/

Ähnliche fragen