2015-09-04 29 views
0

我想检查两个表达式是否彼此相等。在WolframCloud中检查两个表达式的相等性

例如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" 
] 

这是返回给定例如真实的,但失败的检查,例如 5aewq + 3(B^3)===图3(b^3 )+ 5aqwe,返回'没有结果 - 至少有一个参数不能被解释'。

在上面的代码中应该更改什么以允许比较更复杂的表达式?也许'限制'解释器?

+0

有意思,所以我的测试用例很糟糕,对吧?每个长度> 3的字符串将被视为变量名称? –

+0

这就是我的代码的行为。当我在字母之间插入'*'时,一切都很好。我会在发送请求之前尝试在wolfram之外做这件事。谢谢你的帮助! –

回答

1

看起来,解释器将5a解释为5*a,但aqwe作为4个字母的变量名称,而不是aewq

我想它(解释器)遵循许多编程语言的惯例,即将以字母开头的字母数字字符串作为某种实体的名称,但将以数字开头的字符串解析为乘以符号省略。

所以5a被解释为5*a,并123.45a被解释为123.45*a,但字符串如aababca1a2c都解释为实体名称。所有这些,特别是2a被解释为2*a的解释与Mathematica/Wolfram语言解释输入的方式一致。

相关问题