2

如何在 GNU dc 中进行分支?OpenBSD 的实现有带有 else 分支的条件,但 GNU 没有……所以你可以有条件地执行一个宏,但是当它完成时,它会让你回到代码中的同一位置。

似乎可以通过在堆栈上留下一个哨兵值来完成,但这很容易出错(特别是因为 dc 不能进行字符串比较,所以我们留下的哨兵只是数字)。

也许与 q/Q 有关?

这甚至可能吗?

4

1 回答 1

3

我想我明白了!

通过在子宏中使用 q/Q,我返回到调用宏的上一级,从而跳过调用者中的任何进一步代码。如果我有条件地调用子宏,这会使调用宏的其余部分成为“else”分支。

[[Input is an odd number.]P]sa
[[Input is an even number.]Pq]sb
[2%0=blax]sc
1lcx
Input is an odd number.
2lcx
Input is an even number.
于 2015-08-04T05:18:13.103 回答