wolfram-mathematica - 具有无序子表达式的模式

标签 wolfram-mathematica

我需要处理像 f[{a,b}]=... 这样的模式哪里ab应该是无序的

到目前为止,我已经通过使用默认值 Sort[] 实现了这一点。每次都在子表达式上 f被定义或评估。

我的问题是

  • 这是否与 Orderless 一样强大? ?
  • 有没有更好的办法?

  • PS:一个示例应用程序是树分解,您可以递归地构建像 subtree[bag1->bag2] 这样的数量,其中 bag1 和 bag2 是无序的顶点集

    答案更新

    Michael Pilat 的回答显示了如何定义规则来自动对 f 的子表达式进行排序。另一种解决方案是定义一个自定义头,如 Bag具有无序属性并将该头用于任何无序子列表

    最佳答案

    我回答后 this question 我咨询了几位同事,他们同意以下确实是处理此问题的最佳/典型方法:

    f[{a_, b_}] := 
     f[{Sort[a], Sort[b]}] /; Not[OrderedQ[a]] || Not[OrderedQ[b]]
    
    In[99]:= f[{{1, 2, 3}, {5, 4, 3}}]
    
    Out[99]= f[{{1, 2, 3}, {3, 4, 5}}]
    

    或者,您可以更换内部 List带有 Orderless 的自定义头部符号的头部属性,如果格式真的很重要,你可以使用最近在这里讨论的各种格式技术 =)

    关于wolfram-mathematica - 具有无序子表达式的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4189895/

    相关文章:

    wolfram-mathematica - 我可以在 Mathematica 中自动懒惰地评估函数参数吗?

    logging - Mathematica 中对数图刻度线的指数形式

    r - R 是否有类似于 Mathematica 中的 TransformedDistribution 的东西?

    wolfram-mathematica - 当不在其 TrackedSymbols 上的变量发生变化时,操纵更新表达式

    wolfram-mathematica - 当参数改变时更新 Manipulate[]'d 图

    wolfram-mathematica - 使用 Mathematica 和 StackOverflow API 观察新的 Mathematica 问题

    java - 随机数 Mathematica 与 Java

    wolfram-mathematica - NMinimize 似乎在破解

    file-io - 将 Mathematica Print[] 输出导出到 .txt 文件

    wolfram-mathematica - Mathematica 不计算积分