我正在考虑一种方法来解决具有简单面向对象的简单方程。我发现了一种似乎在变量单独存在的所有情况下都有效的方法。看:
例如,这个等式:(4 / x + 3) / 2 = 2
首先,我将减号运算符 ( (4 / x + 3) / 2 - 2 = 0
) 中的等号转换为将所有内容都归零。然后我以正常的优先顺序应用所有操作,就像x
变成一个数字一样。第一个是4 / x
,我把操作放在堆栈上:4/
并返回 x。接下来是x + 3
(请记住4 / x
导致x
)。操作进入堆栈(现在是4/ +3
)并返回x
。Remeating 这个最终堆栈将是4/ +3 /2 -2
. 然后我按此顺序还原所有操作:
+n --> -n
-n --> +n
*n --> /n
/n --> *n
n/ --> n/
**n --> **(1/n)
(where the missing value of these binary operations is the variable)
现在堆栈是4/ -3 *2 +2
. 现在我颠倒顺序并将所有操作应用为零:
堆栈:+2 *2 -3 4/
操作:4 / ((0 + 2) * 2 - 3)
结果为 4,即 的值x
。
这是非常令人困惑和复杂的,但是是合乎逻辑的并且很容易用 ruby 编写代码来执行任何方程式:
class Variable
# define all numeric operators to use the stack and return self
end
def solve
x = Variable.new
yield(x)
return x.value
end
x = solve do |x|
(4 / x + 3) / 2 == 2
end
这个最终的界面很酷。
但我的问题是:如何以x + x == 4
这种方式解决?换句话说,如何添加两个变量堆栈?