Re: Question on defaults in positional arguments
- To: mathgroup at smc.vnet.net
- Subject: [mg112625] Re: Question on defaults in positional arguments
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Thu, 23 Sep 2010 04:23:13 -0400 (EDT)
- References: <i79hsa$ofd$1@smc.vnet.net>
Am 21.09.2010 08:03, schrieb NP: > Hi, > > I was wondering if there was a way in selectively specifying some of > the arguments of a function (rest remaining default). For instance, > consider > Clear[f, x, y,z]; > f[x_: 1, y_: 2,z_:3] := {x, y} > f[5] > > {5,2,3} > > Here the default values of y and z are automatically used. How can I > call f so that, for example, the default value of x and z are used > instead? AFAIK there is no tricky pattern which would let you do that. I see to common ways to solve your problem: 1) use options instead of positional arguments: Options[f] = {x->1,y->2,z->3}; f[OptionsPattern[]]:={OptionValue[x],OptionValue[y],OptionValue[z]} f[y->5] 2) use a placeholder like Automatic to mark the empty slots: f[xx_:Automatic,yy_:Automatic,zz_:Automatic] := With[{ x=Replace[xx,Automatic:>1], y=Replace[yy,Automatic:>2], z=Replace[zz,Automatic:>3] }, {x,y,z} ] f[Automatic,4] If you extend the pattern to also replace Null you could even use an empty argument, although the frontend will mark it as a syntax error and I think it contradicts the usual design rules: f[xx_: Automatic, yy_: Automatic, zz_: Automatic] := With[{ x = Replace[xx, Automatic | Null :> 1], y = Replace[yy, Automatic | Null :> 2], z = Replace[zz, Automatic | Null :> 3] }, {x, y, z}] f[,7] hth, albert