在 dc 中,如何从堆栈顶部弹出并丢弃一个数字?包含三个项目 ( 1 2 3
) 的堆栈应成为包含两个项目 ( 2 3
) 的堆栈。目前我正在将数字推到另一个堆栈(Sz)上,但这似乎很蹩脚。
问问题
478 次
1 回答
5
有很多方法可以删除堆栈的顶部,但它们有副作用。删除没有副作用的元素需要您避免包含的副作用。
要在没有副作用的情况下移除栈顶,请确保栈顶是一个数字,然后运行d!=z
. 如果堆栈有 [5],则执行以下操作
- 从要删除的项目开始。
Stack: [5]
- 重复栈顶。
Stack: [5,5]
- 弹出顶部 2 并测试它们是否不相等:
5 != 5
Stack: []
- 如果测试通过(它不能),运行
z
Stack: []
为了确保栈顶是一个数字,我使用Z
它将计算字符串的长度或数字中的位数并将其推回。还有其他选项,例如 X。任何从任何东西中产生数字的东西都可以使用,以便与 != 兼容。
因此,在所有情况下复制粘贴的完整答案如下:
Zd!=r
我通常把它放在寄存器 D 中(用于 Drop):
[Zd!=r]sD
然后我可以运行
lDx
于 2015-04-17T03:37:00.150 回答