2013-09-04 3 views
4

Есть ли способ получить доступ к элементу стека по его индексу в Forth, не выбирая все элементы над ним?Получить n-й элемент из стека в Forth

Например, если у меня есть числа от 1 до 1000, которые помещаются в стек, как я могу получить 500-й элемент?

ответ

8
500 PICK 

... будет скопировать элемент 500 уровней вниз по стеку в верхнюю часть стека в Forth79.

+0

Так '0 выбор 'скопировал бы последний добавленный элемент в стек? – sashoalm

+0

@sashoalm Насколько я помню, '2 PICK' такой же, как' OVER', а '1 PICK' такой же, как' DUP'. Я не думаю, что «0 PICK» действителен. –

+2

Не совсем. См. Http://lars.nocrew.org/dpans/dpansa6.htm#A.6.2.2030 –

5

И если Forth вы используете не кирку, вы могли бы определить его как

: PICK ?DUP IF SWAP >R 1- RECURSE R> SWAP EXIT THEN DUP ; 

(Конечно, итеративный версия также будет возможно.)

+0

Подтвержденный здесь: https://ideone.com/HChnxr –