dc:如何弹出(并丢弃)堆栈的最高编号?

Mar*_*son 4 dc

在DC中,如何从堆栈顶部弹出并丢弃一个数字?具有三个项目(1 2 3)的堆栈应该成为具有两个项目(2 3)的堆栈.目前我正把这个号码推到另一个堆栈(Sz),但这看起来相当蹩脚.

Jam*_*ese 5

有很多方法可以删除堆栈顶部,但它们有副作用.删除没有副作用的元素需要避免包含副作用.

要在没有副作用的情况下移除堆栈顶部,请确保顶部是数字,然后运行d!=z.如果堆栈有[5],则执行以下操作

  1. 从要删除的项目开始. Stack: [5]
  2. 复制堆栈顶部. Stack: [5,5]
  3. 弹出前2并测试它们是否不相等: 5 != 5 Stack: []
  4. 如果测试通过(它不能),运行 z Stack: []

为了确保堆栈的顶部是一个数字,我使用Z它来计算一个字符串的长度或一个数字中的数字位数并将其推回.还有其他选项,比如X.任何可以使任何东西产生任何数字的东西都可以使它与!=兼容.

因此,在所有情况下复制粘贴的完整答案如下:

Zd!=r
Run Code Online (Sandbox Code Playgroud)

我通常将其粘贴在寄存器D(对于Drop)中:

[Zd!=r]sD
Run Code Online (Sandbox Code Playgroud)

然后我就可以跑了

lDx
Run Code Online (Sandbox Code Playgroud)