dc: как мне вытолкнуть (и выбросить) верхний номер стека?

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

2 ответа

Решение

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

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

  1. Начните с предмета для удаления. Stack: [5]
  2. Дублирующая вершина стека. Stack: [5,5]
  3. Откройте топ 2 и проверьте, не равны ли они: 5 != 5Stack: []
  4. Если тест пройден (чего не может), запустите zStack: []

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

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

Zd!=r

Я обычно втыкаю это в регистр D (для Drop):

[Zd!=r]sD

и тогда я смогу бежать

lDx

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

Другие вопросы по тегам