I’m trying to write Mathematica code for a baseball simulation, but I don’t have much experience in Mathematica or general programming. How can I make it so that the functions single and double are only executed when I want them to in the while loop? As it is currently, the functions are executing prior to the while loop using stored values for the variable Bases. Any help or explanation is much appreciated.
single[Bases_] = If[ Bases[[1]] == {0, 0, 0}, Bases = {{1, 0, 0}, Bases[[2]]}, If[ Bases[[1]] == {0, 0, 1}, Bases = {{1, 0, 0}, ++Bases[[2]]}, If[ Bases[[1]] == {0, 1, 0}, Bases = {{1, 0, 1}, ++Bases[[2]]}, If[ Bases[[1]] == {0, 1, 1}, Bases = {{1, 0, 1}, ++Bases[[2]]}, If[ Bases[[1]] == {1, 0, 0}, Bases = {{1, 1, 0}, Bases[[2]]}, If[ Bases[[1]] == {1, 0, 1}, Bases = {{1, 1, 0}, ++Bases[[2]]}, If[ Bases[[1]] == {1, 1, 0}, Bases = {{1, 1, 1}, Bases[[2]]}, If[ Bases[[1]] == {1, 1, 1}, Bases = {{1, 1, 1}, ++Bases[[2]]} ] ] ] ] ] ] ] ] double[Bases_] = If[ Bases[[1]] == {0, 0, 0}, Bases = {{0, 1, 0}, Bases[[2]]}, If[ Bases[[1]] == {0, 0, 1}, Bases = {{0, 1, 0}, ++Bases[[2]]}, If[ Bases[[1]] == {0, 1, 0}, Bases = {{0, 1, 0}, ++Bases[[2]]}, If[ Bases[[1]] == {0, 1, 1}, Bases = {{0, 1, 0}, Bases[[2]] += 2}, If[ Bases[[1]] == {1, 0, 0}, Bases = {{0, 1, 1}, Bases[[2]]}, If[ Bases[[1]] == {1, 0, 1}, Bases = {{0, 1, 1}, ++Bases[[2]]}, If[ Bases[[1]] == {1, 1, 0}, Bases = {{0, 1, 1}, ++Bases[[2]]}, If[ Bases[[1]] == {1, 1, 1}, Bases = {{0, 1, 1}, Bases[[2]] += 2} ] ] ] ] ] ] ] ] Bases = {{0, 0, 0}, 0}; Outs = 0; r1b = .1; r2b = .2; While[Outs < 3, GenerateNumber = RandomReal[]; Print[GenerateNumber]; Print[Bases[[1]], Bases[[2]], Outs] If [ GenerateNumber <= r1b, Bases = single[Bases]; Print[Bases[[1]], Bases[[2]], Outs], If[ GenerateNumber <= r2b, Bases = double[Bases]; Print[Bases[[1]], Bases[[2]], Outs], Outs++; Print[Bases[[1]], Bases[[2]], Outs] ] ] ]