Mathematica Asked on July 22, 2021
Suppose, there are two delayed expressions
D1:= RandomVariate[UniformDistribution[{-1, 0}]];
D2:= RandomVariate[ UniformDistribution[{0, 1}]];
D1, D2
work as needed generating a pair of random numbers. How to swap D1, D2
without repeating the full coding
D2:= RandomVariate[UniformDistribution[{-1, 0}]];
D1:= RandomVariate[ UniformDistribution[{0, 1}]];
Clearly, that code {D1,D2}= (or :=) {D2,D1}
does not work.
Can't you just define a single function?
d[x_,y_]:=RandomVariate[UniformDistribution[{x, y}]];
Then call it as:
D1 = d[-1,0]
or
D2 = d[0,1]
Answered by Jagra on July 22, 2021
There are different usages of SetDelayed
. Read SetDelayed
documentation, Section Scope
> Diffrent Kinds of Values
for more information.
This solution works on var := def
(like your case) not var[] := def
or other kinds.
ClearAll[swapSetDelays];
SetAttributes[swapSetDelays, HoldAll];
swapSetDelays[a_, b_] := With[{temp = OwnValues[a]},
OwnValues[a] = OwnValues[b] /. HoldPattern[b] :> a;
OwnValues[b] = temp /. HoldPattern[a] :> b;
]
SeedRandom[1];
r1 := RandomInteger[{1, 10}];
r2 := RandomInteger[{11, 20}];
{r1, r2}
(* Out: {2,15} *)
swapSetDelays[r1, r2];
{r1, r2}
(* Out: {11, 8} *)
Answered by Ben Izd on July 22, 2021
In the rather unlikely case of you actually wanting to swap two definitions, e.g.
D1 := RandomVariate[UniformDistribution[{-1, 0}]];
D2 := RandomVariate[UniformDistribution[{0, 1}]];
You can do so temporarily
Module[{D1 = D2, D2 = D1}, Print[{D1, D2}]]
{0.863742,-0.710931}
If you've already used these definitions e.g.
print := Print[{D1, D2}]
print
{-0.349444,0.720738}
and would like to interchange them temporarily, you can use
Block[{D1 = D2, D2 = D1}, print]
{0.123198,-0.592611}
Needless to say, if you interchange them permanently, there is risk of becoming confused about how many times you've done it!
Answered by mikado on July 22, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP