【问题标题】:Checking equality of two expressions in WolframCloud在 Wolfram Cloud 中检查两个表达式的相等性
【发布时间】:2015-09-04 13:55:32
【问题描述】:

我想检查两个表达式是否相等。

例如 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,返回“无结果 - 至少一个参数无法解释”。

为了比较更复杂的表达式,上面的代码应该做些什么改变?也许是“受限”解释器?

【问题讨论】:

  • 有趣,所以我的测试用例很糟糕,对吧?每个长度 > 3 的字符串都将被视为变量名?
  • 这就是我的代码的行为方式。当我在字母之间插入“*”时,一切都很好。在发送请求之前,我将尝试在 wolfram 外部执行此操作。感谢您的帮助!

标签: wolfram-mathematica wolframalpha


【解决方案1】:

似乎解释器将5a 解释为5*a,但将aqwe 解释为4 字母变量名,而不是aewq

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

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

【讨论】:

    猜你喜欢
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多