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

时间:2013-06-21 23:21:27

标签: dc

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

2 个答案:

答案 0 :(得分:5)

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

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

  1. 从要删除的项目开始。 Stack: [5]
  2. 复制堆栈顶部。 Stack: [5,5]
  3. 弹出前2并测试它们是否相等:5 != 5 Stack: []
  4. 如果测试通过(但不能),请运行z Stack: []
  5. 为了确保堆栈的顶部是一个数字,我使用Z来计算字符串的长度或数字中的位数并将其推回。还有其他选项,比如X.任何可以使任何东西产生任何数字的东西都可以使它与!=兼容。

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

    Zd!=r
    

    我通常把它放在寄存器D(Drop)中:

    [Zd!=r]sD
    

    然后我可以运行

    lDx
    

答案 1 :(得分:4)

[...答案删除,其他答案更好......]