如何比較JavaScript中的兩個數學表達式? 例如「1 + x」和「x + 1」。將數學表達式與JavaScript進行比較
有一個JavaScript數學解析器,但我找不到比較解析表達式的邏輯: https://github.com/silentmatt/js-expression-eval/blob/master/test.js
是否還有其他選擇?
感謝
如何比較JavaScript中的兩個數學表達式? 例如「1 + x」和「x + 1」。將數學表達式與JavaScript進行比較
有一個JavaScript數學解析器,但我找不到比較解析表達式的邏輯: https://github.com/silentmatt/js-expression-eval/blob/master/test.js
是否還有其他選擇?
感謝
您將需要一個計算機代數系統(CAS),才能真正測試兩個表達式是否相等。我唯一知道的JavaScript是javascript-cas,我不確定這是否能滿足您的需求。其他庫如math.js和提到的js-expression-eval可以解析表達式,但錯過邏輯來理解兩個表達式是否相等。
一個實用的方法可能是比較兩個表達式的結果對於x
的許多不同值,並查看它們是否具有相同的結果。這並不總是奏效,例如0/x+1
和x-x
每x
給出相同的結果,但它們並不完全相同。
是否有可能通過優先級重新排序由js-expression-eval生成的AST並逐個比較元素?可能會有非常複雜的情況,但我認爲我只需要像「1 + x」==「x + 1」和「1 + 2 * x」==「x * 2 + 1」之類的東西。 – pablo 2014-09-26 05:43:00
我不確定這是否可以用'js-expression-eval'實現,它似乎沒有給出一個節點樹。你可以用math.js做到這一點,例如:運行'math.parse('1 + 2 * x')'返回一個[nodes]的樹(https://github.com/josdejong/mathjs/tree/master/lib/expression/node),因此您可以遍歷所有節點並在需要時對參數進行排序。在這種情況下,根節點將是一個'OperatorNode',它的屬性是'op =='+'','fn =='add'','type ==「OperatorNode」',而'params'是一個包含兩個參數:一個OperatorNode'*'和一個ConstantNode 1,你可以按照類型命令這些參數。 – 2014-09-26 08:02:37
如果你需要知道的只是平等,那麼你可以做近似的比較:從表情
x+1
和1+x
提取變量名所以單個變量x
genere僞隨機或網格集va梅毒爲他們
解析與當前的變量的每一個表達設置
嘗試從genered數據的所有情況下被設
你所說的「比較」是什麼意思?你期待什麼輸出? – cbp 2014-09-25 04:53:40
我在尋找真假 – pablo 2014-09-26 05:41:02