2013-06-21 7 views
4

В DC, как мне поп и отбросить число из верхней части стека? Стек с тремя элементами (1 2 3) должен стать стеком с двумя элементами (2 3). В настоящее время я собираю номер в другой стек (Sz), но это выглядит довольно хромым.dc: как мне поместить (и удалить) верхний номер стека?

+1

Как может быть, что что-то находится в стеке, которого вы не хотите? – hendrik

+1

@hendrik: Если у вас есть счетчик, который вы используете для управления количеством итераций цикла, тогда, когда цикл завершается, вы должны отменить счетчик. –

ответ

5

Есть множество способов, чтобы удалить верхнюю часть стека, но они имеют побочные эффекты. Удаление элемента без побочных эффектов требует от вас побочных эффектов.

Чтобы удалить верхнюю часть стека без побочного эффекта, убедитесь, что верхний номер является номером, а затем запустите d!=z. Если в стеке было [5], это делает следующие

  1. Начните с элемента для удаления. Stack: [5]
  2. Duplicate верхней части стека. Stack: [5,5]
  3. Поп топ 2 и тест, если они не равны: 5 != 5Stack: []
  4. Если тест пройден (который он не может), запустить zStack: []

Чтобы убедиться, что вершина стека является числом , Я использую Z, который будет вычислять длину строки или число цифр в номере и нажимать ее обратно. Существуют и другие варианты, такие как X. Все, что делает число из чего-либо, будет работать так, чтобы оно было совместимо с! =.

Так полный ответ для копирования вставки во всех ситуациях, является следующее:

Zd!=r 

Я обычно придерживаться этого в регистре D (для Капли):

[Zd!=r]sD 

, а затем я могу запустить

lDx 
4

[... ответ удален, другой ответ лучше ...]

+1

Это может быть самый удовлетворительный ответ, который у меня когда-либо был. Благодаря!! –

+0

Это интересное решение, но оно кажется гораздо более загадочным, чем резервирование регистра для него, который первоначально выполнял ОП. Моей единственной модификацией для этого было бы использовать 's', а не' S', поскольку первая перезаписывает любое существующее значение регистра, так что никакая память не будет потрачена впустую, если в регистр записано много вещей. – nyuszika7h

+0

@ nyuszika7h: вопрос спрашивает, как сбросить верхнюю часть стека * без * использования регистра. –

 Смежные вопросы

  • Нет связанных вопросов^_^