Wolfram 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 :

这是一个分支和扩展:

许多内置Mathematica函数允许灵活的参数。在用户定义的函数中,我一直在使用
备选方案
,但对所引用问题的评论和回答表明,这至少是不标准的,而且可能是不可取的

让我定义一个伪函数
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先生,给我几个小时。我在脑海中写下了这一点,没有充实任何代码示例。