很抱歉这个问题含糊不清,也许我想换个地方?不确定。不管怎么说,这里:
我想确定两个数学表达式是否是“相同的”。我不需要完全的等值测试,我知道这是不可能的。基本上,我想做一个如下所示的函数:
areTheSame(expression1,expression2,测试方法)
测试方法可能包括:“确切”、“允许交换性”、“允许分布”、.
理想情况下,我喜欢懒惰!我很想找个图书馆
4排除SymbolicC++和GiNaC afaik。Math以利是LGPL,我不确定在苹果应用商店的上下文中(我真的不想给出目标文件)。
有什么想法吗?谢谢!
发布于 2014-04-18 05:39:41
这可能不是一个答案,但它太长,不能成为评论。:)
我的第一个想法是:这不是一个容易或常见的问题,所以你可能不会很幸运地找到一个库为你做这件事。另一方面,找到一个做一些非关键部分的库应该不难。
您可能想要做的是解析表达式以创建一个抽象语法树 (您可能会为此找到很多库),然后递归地分析AST,以测试您所追求的相同性的任何定义。
在iOS中,一个不错的起点可能是(可怕的ab)使用NSExpression和NSPredicate。它们具有解析字符串并返回表达式和谓词对象结构的构造函数方法。
递归地遍历这个结构。对于每个谓词,检查predicateOperatorType是否匹配..。如果没有,那么谓词就不一样了。如果是这样,请查看左谓词的leftExpression和右谓词的leftExpression。每个表达式都有一个function,它告诉您它的运算符是什么(加、减等)。如果它们不匹配,表达方式就不一样了。(在另一边做同样的检查。)如果是的话,递归:查看每个表达式的子表达式并进行类似的检查,等等,直到找到常量值或变量的表达式为止。
这是关于如何查看两个谓词(以及它们包含的表达式)是否“匹配”的粗略说明。对于“类似的”,只需在递归遍历树和/或添加更多检查时,放松您执行的每个检查;例如,如果您到达一个函数为add的表达式,则通过将其子表达式与另一个谓词中的相应表达式按任一顺序进行比较来检查其交换性。(此外,可能还有其他库可以解析基本的数学表达式,并为您提供一个可以随意遍历的AST。)
这还不能让你得到你想要的一切--“允许发行”会让你进入成熟的CAS软件领域。也许可以看看Wolfram这样的公司是否有web服务API?
https://stackoverflow.com/questions/23144033
复制相似问题