【问题标题】:dc: how do I pop (and discard) the top number of the stack?dc:如何弹出(并丢弃)堆栈的顶部编号?
【发布时间】:2013-06-19 04:48:14
【问题描述】:

在 dc 中,如何从堆栈顶部弹出并丢弃一个数字?包含三个项目 (1 2 3) 的堆栈应该变成包含两个项目 (2 3) 的堆栈。目前我正在将数字推到另一个堆栈(Sz)上,但这似乎很蹩脚。

【问题讨论】:

  • 堆栈上怎么会有你不想要的东西?
  • @hendrik:如果你有一个计数器来控制循环的迭代次数,那么当循环结束时,你必须丢弃计数器。

标签: dc


【解决方案1】:

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

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

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

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

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

Zd!=r

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

[Zd!=r]sD

然后我可以运行

lDx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 2018-05-09
    • 2016-11-22
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多