这是一个分支和延伸:Is it safe to turn off Pattern::patv?处理灵活的参数在Mathematica函数
许多内置数学功能允许灵活的参数。在用户定义的函数中,我一直使用Alternatives
来达到这个目的,但是对引用问题的评论和回答表明这至少是非标准的,也许是不可取的。
让我定义一个虚拟函数foo
为例。
Off[Pattern::patv]
p = {_?NumericQ, _?NumericQ};
foo[
{x : p ..} | x : p,
{y__} | y__,
ops : OptionsPattern[]
] /; Max[y] <= 10 := bar[#, y, ops] & /@ {x}
foo
接受,为了:
- 一个对象匹配PATTEN
p
,或者这样的对象的列表。 - 为10的最大值的一组隐式数字对象,无论是作为一个列表或参数的序列(如书面这些对象本身可以是具有为10的最大值的数值的列表)匹配
OptionsPattern[]
- 选项
如果未满足这些条件中的任何一个,则返回foo[args]
未评估。
使用Alternatives
(|
)的两种模式是最常见的情况,但它们不是排他性的。
我很想看看foo
应该如何实现。
完成此操作的标准方法是什么?
它比使用
Alternatives
有什么优势?客观上是否更容易阅读?
感谢您的回答。请包括一些代码示例,具体说明如何实现“如果未满足这些条件中的任何一个,foo [args]将返回未评估。”与方法1和2(我知道列昂尼德的方法,但它是你使用?) – 2011-12-16 18:10:53