我可以防止 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
假设我想使用 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