【发布时间】:2012-01-21 05:01:24
【问题描述】:
这是一个分支和扩展:Is it safe to turn off Pattern::patv?
许多内置 Mathematica 函数允许灵活的参数。在用户定义的函数中,我一直在使用 Alternatives 来实现此目的,但是 cmets 和对所引用问题的回答表明这至少是非标准的,并且可能是不可取的。
让我定义一个虚拟函数foo 为例。
Off[Pattern::patv]
p = {_?NumericQ, _?NumericQ};
foo[
{x : p ..} | x : p,
{y__} | y__,
ops : OptionsPattern[]
] /; Max[y] <= 10 := bar[#, y, ops] & /@ {x}
foo 接受,按顺序:
- 与模式
p匹配的对象,或此类对象的列表。 - 一组最大值为 10 的隐式数字对象,可以是一个列表或一系列参数(这些对象本身可以是最大值为 10 的数字列表)
- 选项匹配
OptionsPattern[]
如果不满足这些条件中的任何一个,foo[args] 将不经计算返回。
使用Alternatives (|) 的两种模式是最常见的情况,但它们并不排斥。
我很难知道应该如何最好地实施foo。
实现此目的的规范方法是什么?
与使用
Alternatives相比有什么优势?客观上更容易阅读吗?
【问题讨论】:
标签: wolfram-mathematica arguments user-defined-functions