【发布时间】:2011-12-04 08:03:21
【问题描述】:
默认情况下,如果我对 Blank 和 BlankSequence 模式使用相同的名称,Mathematica 会引发警告消息:
f[{x_, ___} | x__] := g[x]
Pattern::patv:名称 x 用于固定和可变长度模式。 >> Pattern::patv:名称 x 用于固定和可变长度模式。 >>
但该功能按我的意愿工作:
f[{1, 2, 3}]
f[1, 2, 3]
g[1]
g[1, 2, 3]
因此,使用Off[Pattern::patv] 并按照我的意愿继续操作是否安全?
我知道有多种不同的、更冗长的方法可以完成相同的任务,我不想分析它们各自的优点。我只对这个特定的安全感兴趣。
【问题讨论】:
-
@Simon,halirutan,你在包夹我。 :-) 我知道有优点和缺点。我也喜欢编写简洁的代码,我认为模式匹配的这些更有趣的使用是 Mathematica 编码乐趣的一部分。就像中缀一样,我不会试图将这种用法强加给其他人。
-
@Mr.
f[{Shortest[x__], ___} | x__] := g[x]呢? -
@belisarius 我承认,这是我没有考虑过的另一种选择。
-
@Leonid 这听起来有点像精灵会说的话。我还有两个愿望吗?
-
@Mr.Wizard 恐怕这是最后一个了 :)