Rexx - Stosy
Stos jest czasami nazywany zewnętrzną kolejką danych, ale stosujemy się do powszechnego użycia i nazywamy go stosem. Jest to blok pamięci, który jest logicznie zewnętrzny wobec Rexx. Instrukcje, takie jak wypychanie i kolejkowanie, umieszczają dane na stosie, a instrukcje takie jak pull i parse pull wyodrębniają z niego dane. Wbudowana funkcja umieszczona w kolejce raportuje, ile elementów znajduje się na stosie.
Spójrzmy na przykład stosu.
/* STACK: */
/* */
/* This program shows how to use the Rexx Stack as either a */
/* stack or a queue. */
do j = 1 to 3
push ‘Stack: line #’ || j
/* push 3 lines onto the stack */
end
do j = 1 to queued()
/* retrieve and display LIFO */
pull line
say line
end
do j = 1 to 3 queue ‘Queue: line #’ || j
/* queue 3 lines onto the stack */
end
do queued()
/* retrieve and display FIFO */
pull line
say line
end
exit 0
Pierwsza pętla do w programie umieszcza trzy wiersze danych na stosie. Używa do tego instrukcji push. Numerujemy wiersze, aby po ich pobraniu w kolejności LIFO była widoczna ich kolejność.
Pozycje umieszczone na stosie za pomocą instrukcji push są pobierane w kolejności LIFO -
do j = 1 to 3
push ‘Stack: line #’ || j /* push 3 lines onto the stack */
end
Następny blok kodu pokazuje użycie funkcji wbudowanej w kolejce w celu wykrycia liczby wierszy na stosie, a także pętli do pobrania wszystkich wierszy ze stosu -
do j = 1 to queued() /* retrieve and display LIFO */
pull line
say line
end
Ponieważ trzy elementy zostały umieszczone na stosie poprzez wypchnięcie, są one pobierane w kolejności LIFO.
Wynik powyższego programu będzie następujący.
STACK: LINE #3
STACK: LINE #2
STACK: LINE #1