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[9];
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[9];
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
djmp at earthlink.net
http://home.earthlink.net/~djmp/
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[9]
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!
thank you for answering!
MFG Ben