ふたつずつ

なにかわからない数列がある場合、順番に2個ずつとって、その差とか出して分析すると思います。そのふたつずつとってという部分をAPL/J言語では次のように書きます。

   a=:+/\ +/\ i.15
   a
0 1 4 10 20 35 56 84 120 165 220 286 364 455 560
   NB. This is an example array
   2 (-/\) a
_1 _3 _6 _10 _15 _21 _28 _36 _45 _55 _66 _78 _91 _105
   2 (-/\) 2 (-/\) a
2 3 4 5 6 7 8 9 10 11 12 13 14
   2 (-/\) 2 (-/\) 2 (-/\) a
_1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1 _1

aという数列を与えられて、どういうルールで増えているかわからない場合、こうして差をとってみるとわかることが多い。
増えているのに差がマイナス表示なのがおもしろくありませんね。
後ろから前を引けばブラスになる。

   a
0 1 4 10 20 35 56 84 120 165 220 286 364 455 560
   2(-~/\) a
1 3 6 10 15 21 28 36 45 55 66 78 91 105
   2(-~/\) 2(-~/\) a
2 3 4 5 6 7 8 9 10 11 12 13 14
   2(-~/\) 2(-~/\) 2(-~/\) a
1 1 1 1 1 1 1 1 1 1 1 1

今回は引き算なので二つずつですが、三つずつ足してみるとかだと、引数が変わってきます。

   3 (+/\) i.15
3 6 9 12 15 18 21 24 27 30 33 36 39
   # 3 (+/\) i.15
13

ふたつずつだと項目数は一つ減って、三つずつだと項目数は二つ減ります。


Kenneth IversonのMath for the Laymanでは、pw (二つずつ=pairwise)という副詞を作っています。

   pw=:1 : '2 & (u \)'

この方が分かりやすいかもしれません。


以上