Re: Setting Attributes for Function Generated Parameters
- To: mathgroup at smc.vnet.net
- Subject: [mg110281] Re: Setting Attributes for Function Generated Parameters
- From: "Carl K. Woll" <carlw at wolfram.com>
- Date: Fri, 11 Jun 2010 07:58:12 -0400 (EDT)
On 6/11/2010 2:09 AM, telefunkenvf14 wrote:
> Group:
>
> My goal is to generate a list of symbolic parameters that other
> functions in a package can Map[] over. For sake of example, suppose I
> define the following 'utility' function as part of a larger package.
>
> In[1]:= ClearAll["Global`*"]
> In[2]:= shares[n_?IntegerQ/;n>0,s_Symbol:
> s]:=Module[{i},Table[Symbol[ToString[s]<>ToString[i]],{i,n}]]
> In[3]:= shares[2]
>
> Out[3]= {s1,s2}
>
> I would now like to include the attribute Constant to each of the
> s1, ..., sn generated. What is the best way to do this?
> My gut tells me that ideally I'd want to do this inside the shares[]
> function itself, but I couldn't figure out how. The workaround I've
> been toying with is to define another utility function:
>
> In[4]:= setConstants[vars_]:=SetAttributes[#,Constant]&@vars
>
> This seems to work ok...But does anyone see potential pitfalls with
> this approach?
>
> In[5]:= setConstants[shares[2]]
> In[6]:= Attributes[s1]
> In[7]:= Attributes[s2]
>
> Out[6]= {Constant}
> Out[7]= {Constant}
>
> -RG
>
>
If the symbol you are creating already has a value, then SetAttributes
won't work.
Do the symbols need to always start with 1? If not, then using something
like:
Table[ Unique["s", Constant], {10}]
might be a possibility.
Carl Woll
Wolfram Research