5

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

4

1 回答 1

5

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

要在没有副作用的情况下移除栈顶,请确保栈顶是一个数字,然后运行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
于 2015-04-17T03:37:00.150 回答