MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Return intermediate reference using Hold*****?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg109573] Re: Return intermediate reference using Hold*****?
  • From: Bob Hanlon <hanlonr at cox.net>
  • Date: Thu, 6 May 2010 04:50:37 -0400 (EDT)

ClearAll[matchType];

SetAttributes[matchType, HoldFirst]

matchType[
  type_Symbol, 
  candidates_?(VectorQ[#, StringQ] &)] :=
 Module[
  {typeStr = SymbolName[Unevaluated[type]]},
  Select[
   DeleteCases[candidates, typeStr],
   ToExpression[# <> "==" <> typeStr] &]]

GrassA = 1;

GrassB = 2;

GrassC = 2;

This last entry could either be an error or a form of naming conflict caused by using capital letters at the start of user-defined names.

GrassType = GrassA;

matchType[GrassType, {"GrassA", "GrassB"}]

{GrassA}

Or to drop the list brackets

matchType[GrassType, {"GrassA", "GrassB"}][[1]]

GrassA

matchType[GrassType, Names["Grass*"]]

{GrassA}

GrassType = GrassB;

matchType[GrassType, {"GrassA", "GrassB"}]

{GrassB}

matchType[GrassType, Names["Grass*"]]

{GrassB,GrassC}

This last example detects the ambiguity or name similarity. This is why it is best (my opinion) to drop the list brackets outside the function rather than inside.


Bob Hanlon

---- Adam <juneappal at gmail.com> wrote: 

=============
Hello -

Supposing I have declared:
x = 1
y = x

Is there a function that can take y as an argument and return  "x"?

I would like to use it like this:


***
GrassA = 1
GrassB = 2
GrassType = GrassA  (*<---- I will toggle this for different model
runs*)

(*Lots of code and calculations, followed by summary printout *)

Print[Row[{"GrassType = ", HOLDLIKEFUNCTION[GrassType], "\tDepth = ",
h}]]


*****
HoldForm[GrassType] returns "GrassType," instead of the desired
"GrassA."

For now, I am using:
******
Clear[GrassA, GrassB]
Print[Row[{"GrassType = ", HOLDLIKEFUNCTION[GrassType], "\tDepth = ",
h}]]
******

Which has the desired effect, so I am not desparate for a solution -
just wonder how other people would approach this.




  • Prev by Date: Re: ComplexExpand and subscrips
  • Next by Date: Re: mathlink error handling inside :Begin: - :End:
  • Previous by thread: Re: Return intermediate reference using Hold*****?
  • Next by thread: Re: Return intermediate reference using Hold*****?