APL/J言語でのランダム


J言語でランダムな数値を得るには、?(はてな)を使います。

   ?10
8

二項動詞として?(はてな)を使うと、ランダムに重複なくピックアップしてくれて便利です。

   4?10
1 9 5 8
   10?10
3 4 5 2 7 1 0 6 9 8

さて、ということは?(はてな)の左辺は右辺の数字を超えないということです。

   11?10
domain error
さいころを6回転がす、というような場合は重複を許しますので、?6を単純に6回行います。
   ?6 6 6 6 6 6
2 4 5 0 0 0
言い忘れましたが、ゼロベースですので、1を足さないとさいころになりません。
   1 + ?6 6 6 6 6 6
4 6 1 3 1 2
10?10のように数字をnとするとn?nという場合は、動詞を自分自身に作用させるという意味だと思うのですが、リフレックスの意味の副詞があって~(チルダ、tilde、ふにゃら)を使います。
   ?~6 NB.= 6?6と同じ意味
3 1 0 2 4 5
ところで、Iversonの論文に
   b=: ?.~ 6   The integers in random order
と書かれていて、え、この?(はてな)と~(チルダ)の間にある.(ドット)はなに? と思って調べたら、?(はてな)のあとに.(ドット)をつけたものはランダムのタネ(seed)が固定のものとのこと。
   ?.~6
0 1 5 4 3 2
   ?.~6
0 1 5 4 3 2
   ?.~6
0 1 5 4 3 2
なるほどですね。ランダムかつ同じ数字が欲しい場合って、テストなんかではあり得る話だと思います。 以上