我想检查两个表达式是否相等。
例如3a + 5b === 5b + 3a应该返回'true'。
我正在尝试使用一个函数:
CloudDeploy[
APIFunction[
{
"x" ->Restricted["SemanticExpression", All, Automatic,"equalityTestingContext`"],
"y" ->Restricted["SemanticExpression", All, Automatic,"equalityTestingContext`"]
},
TrueQ[Simplify[#x == #y]] &
],
Permissions -> "Public"
]
对于给定的示例,这返回true但是例如检查失败 5aewq + 3(b ^ 3)=== 3(b ^ 3)+ 5aqwe,返回'无结果 - 至少有一个参数无法解释'。
上面的代码应该改变什么才能比较更复杂的表达式?也许'受限制'翻译?
答案 0 :(得分:1)
似乎解释器将5*a
构造为aqwe
,但将aewq
构造为4个字母的变量名称,与5a
不同。
我猜它(解释器)遵循许多编程语言共同的做法,即将字母数字字符串作为某种实体的名称开头,但解析以数字开头的字符串作为乘法标志省略。
因此5*a
被解释为123.45a
,而123.45*a
被解释为a
,但ab
,abc
,{等字符串{1}},a1
,a2c
都被解释为实体名称。所有这些,尤其是2a
对2*a
的解释与Mathematica / The Wolfram语言解释输入的方式一致。