       Re: Assign a value to a variable

• To: mathgroup at smc.vnet.net
• Subject: [mg63039] Re: [mg62996] Assign a value to a variable
• From: "David Park" <djmp at earthlink.net>
• Date: Sun, 11 Dec 2005 04:57:34 -0500 (EST)
• Sender: owner-wri-mathgroup at wolfram.com

```Ben,

The quick answer is to Evaluate the lhs of the Set statement.

vars = {a, b, c, d, e, f, g, h, i};
numbers = Range;

Evaluate[vars[[Random[Integer,
{1, Length[vars]}]]]] =
numbers[[Random[Integer, {1, Length[numbers]}]]]
vars

But are you going to evaluate it repeatedly? Then you will get an error if a
variable is already assigned. You could do something like this...

randomAssign[vars_?VectorQ, nums_?VectorQ] :=
Module[
{ranvar = Random[Integer, {1, Length[vars]}],
rannum = Random[Integer, {1, Length[vars]}],
x, y},
y = Part[vars, ranvar];
x = Part[nums, rannum];
If[Head[y] === Symbol, Evaluate[y] = x];
]

randomAssign[vars, numbers]
vars

Or maybe you want to Drop the entries from each of the lists with each
assignment. You could then use the following...

ClearAll[randomAssign];
Attributes[randomAssign] = {HoldAll};
randomAssign[vars_?VectorQ, nums_?VectorQ] :=
Module[
{ranvar, rannum, x, y},
If[Length[vars] == 0 \[And] Length[nums] == 0, Return[]];
ranvar = Random[Integer, {1, Length[vars]}];
rannum = Random[Integer, {1, Length[vars]}];
y = Part[vars, ranvar];
x = Part[nums, rannum];
Evaluate[y] = x;
vars = Drop[vars, {ranvar}];
nums = Drop[nums, {rannum}];
]

Clear[a, b, c, d, e, f, g, h, i]
vars = {a, b, c, d, e, f, g, h, i};
numbers = Range;

randomAssign[vars, numbers]
{a, b, c, d, e, f, g, h, i}
vars

The last statements can be evaluated repeatedly until all variables are
assigned.

David Park

From: Ben Becker [mailto:ben.becker at gmx.de]
To: mathgroup at smc.vnet.net

Hi!

I have a list of variables:
vars = {a, b, c, d, e, f, g, h, i}

and a list of numbers:
numbers = Range

Now i'd like to choose randomly a variable and a number. and then i'd
like to assign the number to the variable.
I thought of somehting like that:

vars[[Random[Integer, {1, Length[vars]}]]] =
numbers[[Random[Integer, {1, Length[numbers]}]]]

but it doesn't work.

i hope you have an idea!