Стек иногда называют внешней очередью данных, но мы следуем общему использованию и называем его стеком. Это блок памяти, который логически является внешним по отношению к 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.
Вывод вышеуказанной программы будет следующим.