Benutzer-Werkzeuge

Webseiten-Werkzeuge


words:pick

pick

In ANS ist 0 PICK aquivalent zu DUP (gforth).

PICK wird gewöhnlich low level codiert. Das Beispiel in high level forth zeigt das Verhalten des Stack.

\ pick nth item from stack. top of stack is x0 befor n was placed there.

: pick  ( n -- xn ) 
  1+ cells sp@ + @ ;

In gforth wächst der Stack nach unten in Richtung absteigender Adressen um je eine cell pro item. Die älteren items haben daher die höhere Adresse.

screenshot:

66 55 44 33 22 11 00  ok
drop sp@ . .s 21028840 <6> 66 55 44 33 22 11  ok
drop sp@ . .s 21028844 <5> 66 55 44 33 22  ok
drop sp@ . .s 21028848 <4> 66 55 44 33  ok
drop sp@ . .s 21028852 <3> 66 55 44  ok
drop sp@ . .s 21028856 <2> 66 55  ok
drop sp@ . .s 21028860 <1> 66  ok
drop sp@ . .s 21028864 <0>  ok
drop sp@ . .s 
*the terminal*:63: Stack underflow
drop sp@ . .s
^^^^
Backtrace:

In Forth79 war 1 PICK aquivalent zu DUP (MVP-Forth).

Es waren 8-bit Maschinen, das Forthwort war 16 Bit breit, daher genügte immer 2* statt cells.

\ pick nth item from stack. top of stack is x1 befor n was placed there.

: pick  ( n -- xn ) 
  dup 1 < abort" PICK ARGUMENT < 1"
  2* sp@ + @ ;

Zum ausprobieren:

:  dup ( x0-- x0 x0 ) 0 pick ;
: 2dup ( x1 x0 -- x1 x0 x1 x0 ) 1 pick 1 pick ;
: 3dup ( x2 x1 x0 -- x2 x1 x0 x2 x1 x0 ) 2 pick 2 pick 2 pick ;

\ usw.
words/pick.txt · Zuletzt geändert: 2010-12-29 18:12 (Externe Bearbeitung)