【发布时间】:2011-08-19 13:12:28
【问题描述】:
在处理我对这个question 的回答时,我想到很难匹配有限范围的元素。使用内置模式,您可以匹配 1 个元素 (_)、1 个或多个元素 (__) 或零个或多个元素 (___)。为了匹配多个元素,我使用了PatternSequence,就像这样
a:PatternSequence[_,_,_]
或者,更一般的
a:PatternSequence@@Array[_&,3].
(使用 Condition 也可以。)我们可以匹配 n 到 m 个元素的范围
a:Alternatives@@( PatternSequence @@@ Array[_&, {n,m}] ),
但这是一种相当复杂的方式来完成可以由以下人员完成的事情
a__ /; n <= Length[{a}] <= m.
然而,这带来了一个有趣的问题,使用Condition 形式可以直接匹配范围 0 到 n,
a___ /; Length[{a}] <= n,
但这是否可以单独使用模式来完成,即不使用Condition (/;)?更具体地说,如何在不添加条件的情况下匹配 0 个元素?还有,哪个更快?
【问题讨论】: