Wolfram mathematica Mathematica函数中灵活参数的处理
这是一个分支和扩展: 许多内置Mathematica函数允许灵活的参数。在用户定义的函数中,我一直在使用Wolfram mathematica Mathematica函数中灵活参数的处理,wolfram-mathematica,arguments,user-defined-functions,Wolfram Mathematica,Arguments,User Defined Functions,这是一个分支和扩展: 许多内置Mathematica函数允许灵活的参数。在用户定义的函数中,我一直在使用备选方案,但对所引用问题的评论和回答表明,这至少是不标准的,而且可能是不可取的 让我定义一个伪函数foo作为示例 Off[Pattern::patv] p = {_?NumericQ, _?NumericQ}; foo[ {x : p ..} | x : p, {y__} | y__, ops : OptionsPattern[] ] /; Max[y] <= 10 :
备选方案
,但对所引用问题的评论和回答表明,这至少是不标准的,而且可能是不可取的
让我定义一个伪函数foo
作为示例
Off[Pattern::patv]
p = {_?NumericQ, _?NumericQ};
foo[
{x : p ..} | x : p,
{y__} | y__,
ops : OptionsPattern[]
] /; Max[y] <= 10 := bar[#, y, ops] & /@ {x}
Off[Pattern::patv]
p={uuu?NumericQ,{u?NumericQ};
福[
{x:p..}x:p,
{y__}y__,
操作:选项模式[]
] /; Max[y]我认为有三种处理灵活参数的标准方法:
任何事情都会发生:f[x]
多种形式:f[{x:p..}]
和f[x:p]
,其中一种形式调用另一种形式,以及
替代:f[{x:p..}x:p]
主要区别在于处理灵活参数增加的复杂性。每种方法都有其优点
任何goes的主要优点都是创建可接受模式的简单性,但这会将处理留给函数的内部,从而增加其复杂性。请参阅.m
文件以了解这方面的一个好例子。但是,ErrorListPlot
最终依赖于隐藏在第一个方法外观后面的第二个方法
多重形式方法将复杂性推到调度员选择正确的替代方案上。它具有最简单的函数形式,因为一个表单通常调用另一个具有“正确”数据布局的表单。该方法的难点在于函数规格随备选参数数量的指数增长。这可以通过采用混合方法加以限制,如ErrorListPlot
中的方法
交替具有最复杂的模式形式,并且可能需要特殊的处理来提取类似于任何事情的替代方案。此外,模式本身可能更难构建,而且由于可能需要额外的处理,这种方法应该在三种方法中使用得最少。但是,在某些情况下,如在代码中,此方法可能是最直接的实现。感谢您的回答。请包括一些代码示例,特别是如何实现方法1中的“如果不满足这些条件中的任何一个,则返回foo[args]”。二,。(我知道列奥尼德的方法,但这是你用的吗?@Wizard先生,给我几个小时。我在脑海中写下了这一点,没有充实任何代码示例。