0
|
3165 Views
|
|
2 Total Likes
View groups...
Share
GROUPS:

# A question about two ways to use Default function argument values

Posted 11 years ago
 Usually we define a function with default values by the syntax x_:default, but there is another technique to do this by registering a global default value with Default. In the Document, there are three ways to use Default, two of which have confused me.The document tells thatDefault[f,i] gives the default value to use when _. appears as the i-th argument of f,whileDefault[f,i,n] gives the default value for the i-th argument out of a total of n argumentsTherefore, I have tried the following comparison:Default[f, 1] = a1;Default[f, 2] = a2;Default[f, 3] = a3;f[x_., y_., z_.] := {x, y, z}{f[], f[1], f[1, 2], f[1, 2, 3]}The result isĀ {{a1, a2, a3}, {1, a2, a3}, {1, 2, a3}, {1, 2, 3}}The other example:ClearAll[f];Default[f, 1, 3] = a1;Default[f, 2, 3] = a2;Default[f, 3, 3] = a3;f[x_., y_., z_.] := {x, y, z}{f[], f[1], f[1, 2], f[1, 2, 3]}This give the same result.It seems that there is no difference between these two ways to use Default. If there were no difference, why would the document list the two ways?I'd appreciate it if someone could provide some information.
 Thanks God does the other example give the same result as the first: both definitions take three arguments. But in fact the second feature allows you to define functions with mandatory and optional arguments In[189]:= ClearAll[g]; Default[g, 3, 5] = a3; Default[g, 4, 5] = a4; Default[g, 5, 5] = a5; g[x1_, x2_, x3_., x4_., x5_.] := {x1, x2, x3, x4, x5} {g[o1], g[o1, o2], g[o1, o2, 1], g[o1, o2, 1, 2], g[o1, o2, 1, 2, 3], g[o1, o2, 1, 2, 3, X]} Out[194]= {g[o1], {o1, o2, a3, a4, a5}, {o1, o2, 1, a4, a5}, {o1, o2, 1, 2, a5}, {o1, o2, 1, 2, 3}, g[o1, o2, 1, 2, 3, X]} whereas with the f default definitions In[171]:= ClearAll[f] Default[f, 1] = a1; Default[f, 2] = a2; Default[f, 3] = a3; f[x_., y_., z_.] := {x, y, z} {f[], f[1], f[1, 2], f[1, 2, 3], f[1, 2,3, x]} Out[176]= {{a1, a2, a3}, {1, a2, a3}, {1, 2, a3}, {1, 2, 3}, f[1, 2, 3, x]} and In[195]:= {f[o1], f[o1, o2], f[o1, o2, 1], f[o1, o2, 1, 2], f[o1, o2, 1, 2, 3], f[o1, o2, 1, 2, 3, X]} Out[195]= {{o1,a2,a3},{o1, o2, a3}, {o1, o2, 1}, f[o1, o2, 1, 2], f[o1, o2, 1, 2, 3], f[o1, o2, 1, 2, 3, X]}