为何Part函数中无法使用RandomInteger???
mathematica吧
全部回复
仅看楼主
level 9
下面两个程序应该是相同的,无非是第二个程序把下标明确提取出来,但第二个程序能够得到正确结果,第一个却不行,为什么?
SeedRandom[1234];
xs = {0, 0};
While[Min[xs] < 2, xs[[RandomInteger[{1, 2}]]]++; Print@xs];
得到:
{0,1}
{2,1}
{3,1}
{4,1}
{4,5}
SeedRandom[1234];
xs = {0, 0};
While[Min[xs] < 2, pos = RandomInteger[{1, 2}]; xs[[pos]]++;
Print@xs];
得到:
{0,1}
{0,2}
{0,3}
{1,3}
{2,3}
2015年01月09日 08点01分 1
吧务
level 12
看本吧的贴子”一下看不明白 求指导”
2015年01月09日 09点01分 2
2015年01月09日 09点01分
吧务
level 12
Trace看了一下,xs[[RandomInteger[{1, 2}]]]++这句实际解释为:
xs[[RandomInteger[{1, 2}]]]=xs[[RandomInteger[{1, 2}]]]+1
注意前面和后面是分别进行了两次随机取值。
2015年01月09日 09点01分 3
level 9
仔细查看了一下文档,发现:++、--有一个HoldFirst属性!
感谢
@qsraaaa520
@青衣瓦屋
的帮助!
不过说句实话,这个设计的确令人蛋疼
2015年01月12日 13点01分 4
这样设计自有它的优点的
2015年01月12日 13点01分
其实这个才是正确的设计,因为x++就是x=x+1(其实是++x才等于x=x+1,但不影响讨论),而Set具有HoldFirst属性。如果不HoldFirst的话会出现1++之类的错误。
2015年01月14日 17点01分
1