dc unix:即使在同一数组索引处存储新值后仍保留初始值
dc unix : preserving initial value even after storing new value at the same array index
我无法理解 dc
联机帮助页中给出的这个示例:
$ dc
1 0:a 0Sa 2 0:a La 0;ap
1
对我来说答案应该是 2 因为:
1 0:a
这里我们将 1 存储在数组 a
.
的第 0 个位置
0Sa
现在我们将 0 压入寄存器 a
的堆栈。
2 0:a
现在我们再次将 2 存储在数组 a
的第 0 个位置,从而覆盖存储在该位置的前一个 1。
La
现在我们弹出存储在寄存器 a
堆栈中的 0 并将其压入主堆栈。
0;a
现在我们再次将 0 压入主堆栈,然后将其弹出以用作数组索引,因此将存储在数组 a
的第 0 个位置的 2 压入主堆栈。
p
现在我们打印主堆栈的顶部,即 2。所以答案应该是 2。
我错过了什么?
编辑:
$ dc -V
dc (GNU bc 1.06.95) 1.3.95
手册页中示例前给出的解释:
Note that each stacked instance of a register has its own array associated with it.
换句话说,当你在同一个寄存器上使用数组命令和堆栈命令时,你创建了一个二维结构。数组命令对顶行中的条目进行操作,堆栈命令对整行进行操作。
此外,使用 l
和 L
命令检索的堆栈条目的 "scalar" 值与数组完全分开,而不仅仅是第 0 个元素的别名。 (我没有从手册页中得到它,但在我的实验中似乎是这样。)
以下是示例中的命令,a
的结果值扩展为详细格式。最外层的结构是栈,栈顶在前。
所有寄存器的初始值:
[
{ scalar: undefined, array: [] }
]
1 0:a
[
{ scalar: undefined, array: [1] }
]
0 Sa
[
{ scalar: 0, array: [] },
{ scalar: undefined, array: [1] }
]
2 0:a
[
{ scalar: 0, array: [2] },
{ scalar: undefined, array: [1] }
]
La
[
{ scalar: undefined, array: [1] }
]
(已弹出顶部条目。其标量值 0
已被推入主堆栈,其数组值 [2]
已被丢弃。)
0;a
[
{ scalar: undefined, array: [1] }
]
(;
命令不修改寄存器,只是将第 0 个数组条目复制到主堆栈中。由于数组是 [1]
,这将 1
主堆栈的顶部。)
我无法理解 dc
联机帮助页中给出的这个示例:
$ dc
1 0:a 0Sa 2 0:a La 0;ap
1
对我来说答案应该是 2 因为:
1 0:a
这里我们将 1 存储在数组a
. 的第 0 个位置
0Sa
现在我们将 0 压入寄存器a
的堆栈。2 0:a
现在我们再次将 2 存储在数组a
的第 0 个位置,从而覆盖存储在该位置的前一个 1。La
现在我们弹出存储在寄存器a
堆栈中的 0 并将其压入主堆栈。0;a
现在我们再次将 0 压入主堆栈,然后将其弹出以用作数组索引,因此将存储在数组a
的第 0 个位置的 2 压入主堆栈。p
现在我们打印主堆栈的顶部,即 2。所以答案应该是 2。
我错过了什么?
编辑:
$ dc -V
dc (GNU bc 1.06.95) 1.3.95
手册页中示例前给出的解释:
Note that each stacked instance of a register has its own array associated with it.
换句话说,当你在同一个寄存器上使用数组命令和堆栈命令时,你创建了一个二维结构。数组命令对顶行中的条目进行操作,堆栈命令对整行进行操作。
此外,使用 l
和 L
命令检索的堆栈条目的 "scalar" 值与数组完全分开,而不仅仅是第 0 个元素的别名。 (我没有从手册页中得到它,但在我的实验中似乎是这样。)
以下是示例中的命令,a
的结果值扩展为详细格式。最外层的结构是栈,栈顶在前。
所有寄存器的初始值:
[
{ scalar: undefined, array: [] }
]
1 0:a
[
{ scalar: undefined, array: [1] }
]
0 Sa
[
{ scalar: 0, array: [] },
{ scalar: undefined, array: [1] }
]
2 0:a
[
{ scalar: 0, array: [2] },
{ scalar: undefined, array: [1] }
]
La
[
{ scalar: undefined, array: [1] }
]
(已弹出顶部条目。其标量值 0
已被推入主堆栈,其数组值 [2]
已被丢弃。)
0;a
[
{ scalar: undefined, array: [1] }
]
(;
命令不修改寄存器,只是将第 0 个数组条目复制到主堆栈中。由于数组是 [1]
,这将 1
主堆栈的顶部。)