我需要处理像f[{a,b}]=...
这样的模式,其中a
和b
应该是无序的
到目前为止,我已经通过在每次定义或评估Sort[]
时对子表达式使用默认f
来实现此功能。
我的问题是
Orderless
一样健壮?PS:一个示例应用程序是树分解,你递归地建立像子树[bag1-> bag2]这样的数量,其中bag1和bag2是无序的顶点集
回复更新
Michael Pilat的回答显示了如何定义规则以自动排序f的子表达式。替代解决方案是使用Orderless属性定义类似Bag
的自定义头部,并将该头部用于任何无顺序子列表
答案 0 :(得分:4)
在我回答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
头部,如果格式非常重要,您可以使用此处讨论的各种格式化技术= )