MathGroup Archive 2009

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

Search the Archive

Re: Indexed Slot in a Rule - How to do it??

  • To: mathgroup at smc.vnet.net
  • Subject: [mg100331] Re: [mg100289] Indexed Slot in a Rule - How to do it??
  • From: Bob Hanlon <hanlonr at cox.net>
  • Date: Mon, 1 Jun 2009 07:08:13 -0400 (EDT)
  • Reply-to: hanlonr at cox.net

eqs = {0, 5*x1, 1, 10*x3, 3*x2};

Extract all variable names

xvars = Union[Cases[eqs, 
    _Symbol?(! NumericQ[#] &),
    Infinity]];

Attributes[Function]

{HoldAll,Protected}

Since Function has attribute HoldAll

T = Function[Evaluate[xvars], Evaluate[eqs]];

The argument to T is a Sequence

T[1, 2, 3]

{0,5,1,30,6}

T[Sequence @@ {1, 2, 3}]

{0,5,1,30,6}

Consequently, Apply T to a List

T @@ {1, 2, 3}

{0,5,1,30,6}

Apply[T, {1, 2, 3}]

{0,5,1,30,6}


Bob Hanlon

---- Alan <alan.stone at yahoo.com> wrote: 

=============
Here's the problem.  Convert a vector (list) with symbol names into
indexed slots.  I'm doing this so that I can turn the vector into
function that takes a list.  Here's an example of the desired
behavior:

eqs = {0, 5*x1, 1, 10*x3, 3*x2};

convert this to:

indexedeqs = {0, 5*#[[1]], 1, 10*#[[3]], 3*#[[2]]};

T[q_]:=indexedeqs;

T[{1,2,3}] = {0,5,1,30,6}

I can't for the life of me figure out how to do this.  I've been
performing meta-Mathematica all week.  Here's the closest I've come:

xvars={x1,x2,x3};
MapIndexed[Rule[#1, #[[First@#2]]] &, xvars]

But, this treats the second # literally, and puts in the current item
from xvars.  I need a way for the second # to just be # without it
really taking a value.

So, I tried doing it as a string:
xvars={x1,x2,x3};
MapIndexed[Rule[#1, "#[[" <> ToString[First@#2] <> "]]"] &, xvars]

And this creates a rule that looks correct, but, its right hand side
of the rule is a string instead of an expression.

I can't figure this out!!!  Any help is greatly appreciated.

All the best,
Alan



  • Prev by Date: Re: Perpendicular lines do not appear perpendicular
  • Next by Date: Re: MatrixForm affects values instead of only printing ?????
  • Previous by thread: Re: Indexed Slot in a Rule - How to do it??
  • Next by thread: Re: Indexed Slot in a Rule - How to do it??