2016年5月24日火曜日

同じ計算を繰り返す - dup

dup(繰り返す内容, 繰り返す回数)

繰り返す内容が、配列となって、指定した回数分返ってきます。




例:文字列を10回出力

dup("test", 10);

実行結果:
[ test, test, test, test, test, test, test, test, test, test ]


例:rand関数を実行

dup(rand(100), 10)

実行結果:
[ 33, 33, 33, 33, 33, 33, 33, 33, 33, 33 ]

別の値が10回返ってくると思いきや、
同じ値が10回返ってきます。

[ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41 ]
[ 79, 79, 79, 79, 79, 79, 79, 79, 79, 79 ]
[ 60, 60, 60, 60, 60, 60, 60, 60, 60, 60 ]
[ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 ]
[ 26, 26, 26, 26, 26, 26, 26, 26, 26, 26 ]
[ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 ]
[ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 ]
[ 92, 92, 92, 92, 92, 92, 92, 92, 92, 92 ]

おそらく、乱数を生成するのに使う、Seed値が同じまま、
繰り返し実行されているのではないかな、と思います。

→ 『rand()で生成された値』を、『10回出力』しているようです。

回避策:
dup({rand(100)}, 10)

このように、rand関数を{ } でかこむと回避できます。
→ { } でかこむことで関数扱いになり、
『rand()』を『10回出力』することになるようです。

実行結果例:
[ 83, 14, 86, 31, 15, 72, 76, 57, 42, 66 ]
[ 75, 62, 10, 38, 0, 95, 90, 38, 1, 46 ]
[ 92, 98, 47, 20, 96, 9, 85, 93, 13, 62 ]
[ 47, 93, 77, 32, 26, 77, 92, 16, 96, 9 ]
[ 38, 95, 27, 49, 77, 88, 35, 5, 56, 66 ]
[ 50, 64, 67, 50, 86, 7, 40, 90, 85, 61 ]
[ 53, 83, 67, 36, 93, 78, 59, 41, 93, 93 ]
[ 76, 70, 54, 78, 57, 68, 1, 34, 76, 38 ]
[ 58, 42, 35, 2, 29, 58, 52, 86, 35, 68 ]
[ 19, 86, 0, 85, 6, 81, 2, 61, 96, 99 ]
[ 12, 31, 16, 54, 80, 48, 27, 5, 94, 66 ]
[ 12, 51, 43, 20, 82, 58, 9, 49, 45, 45 ]
[ 31, 72, 21, 57, 98, 32, 50, 20, 9, 62 ]


!を使っての繰り返し

"TEST" ! 10;
rand(10) ! 10;
{rand(10)} ! 10;

繰り返す作業の後に!をつけて繰り返す回数を与えると、
dupと同じ結果が返ってきます。

それぞれの実行結果は下になります。

[ TEST, TEST, TEST, TEST, TEST, TEST, TEST, TEST, TEST, TEST ]
[ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 ]
[ 9, 6, 9, 1, 9, 0, 6, 4, 9, 1 ]


0 件のコメント:

コメントを投稿