2015-09-04 59 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語言解釋輸入的方式一致。

相關問題