模式匹配相同元素的列表

时间:2011-06-23 00:06:32

标签: wolfram-mathematica pattern-matching

我正在寻找一个匹配(可能是空的)列表的模式,该列表由相同的(在Equal []意义上的)原子对象组成,但我无法弄明白。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:12)

到目前为止,所有回复似乎都错过了匹配对象需要原子的要求。以下是:

Cases[testList, {a___?AtomQ} /; Equal[a]]

如果你没有定义相同的,你可以使用Equal

Cases[testList, {(a_?AtomQ) ...}]

通过略微修改的测试列表,您将看到其他方法未能满足要求

testList = {{1, 1.0, 1.0}, {a, b, c}, {Exp[Pi] + 1, Exp[Pi] + 1, Exp[Pi] + 1}, {}, {3}};

它们也都错误地匹配第3个元素。

答案 1 :(得分:9)

这对你有用吗?

testList = {
  {1, 1.0, 1.},
  {a, b, c},
  {0, Exp[Pi*I] + 1.0, Sin[Pi]}
}
Cases[testList, _List?(Equal @@ # &)]

答案 2 :(得分:6)

使用Condition代替PatternTest

In[31]:= testList = {{1, 1.0, 1.}, {a, b, c}, {0, Exp[Pi*I] + 1.0, 
    Sin[Pi]}, {}, {3}};

Cases[testList, {a___} /; Equal[a]]

Out[32]= {{1, 1., 1.}, {0, 0., 0}, {}, {3}}

(并扩展Mark的测试用例列表以涵盖空单和单例列表。)