Rexx - Стеки

Стек иногда называют внешней очередью данных, но мы следуем общему использованию и называем его стеком. Это блок памяти, логически внешний по отношению к Rexx. Такие инструкции, как push и queue, помещают данные в стек, а такие инструкции, как pull и parse pull, извлекают из него данные. Встроенная функция очереди сообщает, сколько элементов находится в стеке.

Давайте посмотрим на пример стека.

/* 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

Первый цикл do в программе помещает в стек три строки данных. Для этого он использует инструкцию push. Мы нумеруем строки так, чтобы при их извлечении в порядке LIFO их порядок был очевиден.

Элементы, помещенные в стек инструкцией push, извлекаются в порядке LIFO -

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

Поскольку три элемента были помещены в стек посредством push, они извлекаются в порядке LIFO.

Результат вышеупомянутой программы будет следующим.

STACK: LINE #3 
STACK: LINE #2 
STACK: LINE #1