Modul zásobník služí pro práci se zásobníkem dlouhých čísel. Je použit jako zásobník čísel naší kalkulačky. Bylo by vhodné vydělit tento modul do samostatného souboru, ale pro jednoduchost jej nechávám zde.
\ === Zásobník === .( Zásobník) cr
Datová struktura zásobníku se skládá ze dvou objektů. Pole dlouhých čísel
create stack 20 cells allot
A ukazatele do tohoto pole
variable stackp
Ukazatel hned inicializujem. Necháme ho ukazovat na dno našeho zásobníku
stack stackp !
Uložení čísla na zásobník.
: >stack ( n. → ) ( → n. ) stackp @ 2! \ ulož n. na zásbník stackp @ 4 + stackp ! ; \ posuň ukazatel dopředu
Vyjmutí čísla ze zásobníku
: stack> ( → n. ) ( n. → ) stackp @ 4 - stackp ! \ vrať ukazatel zpět stackp @ 2@ ; \ vyjmi n. ze zásobníku
Právě nadefinovaná slova si hned otestujeme.
TESTING >stack stack> { 34567. >stack -> } { stack> -> 34567. } { 134167. 2. >stack >stack -> } { stack> stack> -> 134167. 2. }
Protože budeme potřebovat vybírat a ukládat čísla na zásobník v párech, nedefinujeme si pro to slova 2>stack a 2stack>
: 2>stack ( n1. n2. → ) ( → n1. n2. ) >stack >stack ; : 2stack> ( → n1. n2. ) ( n1. n2. → ) stack> stack> ;
A otestujeme si jestli jsou v pořádku
TESTING 2>stack 2stack> { 34567. 3. 2>stack -> } { 2stack> -> 34567. 3.}
Nyní již můžeme přistoupit k operacím nad naším zásobníkem. Začneme sčítáním.
: stack+ ( → ) ( n1. n2. → n. ) 2stack> D+ >stack;
A opět si je hned odzkoušíme
TESTING stack+ { 1. 56. 2>stack stack+ stack> -> 57. }