【问题标题】:Is there an algorithm to transform a generic arithmetic formula to another one using arbitrary rules?是否有一种算法可以使用任意规则将通用算术公式转换为另一个算术公式?
【发布时间】:2019-04-10 22:52:27
【问题描述】:

我正在尝试开发一个程序,用户可以在其中选择给定算术公式或表达式的一部分,还可以从给定的一组转换规则中选择一个转换规则,并且程序会相应地转换公式,如果可能的话。

我已经为公式和转换规则构建了表达式树,但我不知道如何使用它们来实现我的目标。

例如:
如果我有以下公式 a * (b * c) + a - c
并且用户选择了这个子公式a * (b * c)
并且还选择了这个变换规则X * ( Y * Z ) ≡ Y * ( X * Z)

那么预期的结果应该是b * ( a * c ) + a - c

即使表达式/规则中有括号,是否有一种算法可以进行这种转换?

【问题讨论】:

  • 将表达式转换为语法树,然后进行树模式匹配。 (Google 会找到很多参考资料。)

标签: algorithm parsing tree formula brackets


【解决方案1】:

你想了解的是"program transformation systems" (PTS)
这些工具接受源代码和明确的“规则”,告诉它如何操作代码。 (Rici 的评论非常简短地描述了用于实现 PTS 的技术。)

使用任意规则很可能会产生废话。人们倾向于编写的是保留程序语义的规则。但是一个好的 PTS 会接受你提供的任何规则并应用它们。 PTS + 规则 == OP 的“算法”。

“公式”是“程序”的子集,因此可以转换代码的 PTS 也可以转换公式。

有关配置了规则以解决代数和一些简单微积分的 PTS 的完整工作示例,请参阅我的 Algebra as a DMS domain 示例。 DMS 是我在过去 23 年中设计和构建的商业 PTS。

【讨论】:

    猜你喜欢
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-07-13
    • 2013-11-28
    • 2015-05-30
    相关资源
    最近更新 更多