J言語にはp:(ピーコロン)という関数があって、p: nでn番目の素数を出します。
p:i.5 2 3 5 7 11
これはp:を0 1 2 3 4に作用させた結果です。
さて、これはこれでいいのですが、100以下の素数のリストが欲しいというときはどうすればよいか。
J言語には^:_1(キャレットコロンマイナスいち)という逆関数を作る副詞があって、これを使ってp:の逆関数(オブバース、インバース)を11に作用させると4が算出されます。つまり、11という数字があって、これが素数とするとそれは素数リストの4+1番目の素数ということです。
(p:^:_1) 11 4
11の代わりに100を入れた結果を使うとどうなるでしょう。以下実験。
(p:^:_1) 100 25 p: 25 101 p: i.25 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 (p:^:_1) 40 12 p: 12 41 p:i.12 2 3 5 7 11 13 17 19 23 29 31 37 p: i. (p:^:_1) 40 2 3 5 7 11 13 17 19 23 29 31 37 primes_up_to=: p: i. (p:^:_1) primes_up_to 40 NB.失敗! 1 primes_up_to=: p:@:i.@:(p:^:_1) primes_up_to 40 NB.成功! 2 3 5 7 11 13 17 19 23 29 31 37