我可以防止 GNU bc 吐出零吗?

Can I prevent GNU bc from spewing out zeros?

假设我想使用 GNU bc 求解方程 x + 3 = 40。我可以这样做的一种方法是首先检查 0 是否是一个解决方案,然后检查 1,依此类推,直到我得到正确的答案。 (显然这不是做代数的最好方法,但是哦好吧。)所以我在 GNU bc 中输入以下代码:

int solver(int x);
define solver(x){
if(x + 3 == 40) return x;
x = x + 1;
solver(x)
}
solver(0)

它产生 37 - 当然是正确答案 - 但 37 后面跟着 37 个零。根据一些实验,似乎每个零都来自 if 语句为假的实例,但如何防止出现零?我正在使用 GNU bc 来解决更复杂的函数并创建更复杂的数字列表,所以对我来说对所有的零进行排序是不切实际的。任何帮助将不胜感激,因为我还没有想出任何办法。

对于每个不是赋值的操作,bc 打印退出状态。抑制它的一种方法是分配给虚拟值 .(无论如何这只是最后一个结果的值),另一种方法是确保您明确打印出您需要的内容。

我会这样写你的函数:

#!/usr/bin/bc -q

define solver(x) {
    if (x + 3 == 40) return x
    return solver(x+1)
}
print solver(0), "\n"

quit

对您尝试的几点说明:

  • 我不明白你的第一行应该做什么,我只是放弃了它
  • 我缩进了代码,添加了一些空格并删除了分号 – 主要是品味和可读性问题
  • 我简化了递归调用以避免 solver(x) 行独立存在,因为这会产生虚假的 0

至于您怀疑 if 语句产生零:请在交互式会话中尝试以下操作:

1 == 2                      # Equality test on its own produces output
0
1 == 1                      # ... for both true and false statements
1
if (1 == 2) print "yes\n"   # No output from false if condition
if (1 == 1) print "yes\n"   # If statement is true, print string
yes