APL/J言語:ランク

名詞のシェイプ(形)、タリー(要素数)、ランク(次元)について解説します。シェイプは$(ドルマーク、シェイプ)、タリーは#(シャープ、タリー),ランクは#@$(シャープアトドルマーク)を名詞に作用させることにより得られます。

以下の例はレポートという2年間の3ヵ月ごとの四半期のデータをについて作られています。

   ]report=: i. 2 4 3
 0  1  2
 3  4  5
 6  7  8
 9 10 11

12 13 14
15 16 17
18 19 20
21 22 23

   ($ ; # ; #@$) report NB.シェイプ、要素数、ランク(次元)
 +-----+-+-+
 |2 4 3|2|3|
 +-----+-+-+

最後のk軸が名詞のkセルを決定します。0セルはアトムです(4とか14とかです)。1セルは要素数3の四半期データです。2セルがmainの二つの4かける3の年間データです。

ランク接続詞"(クオート)がf"kの形で引数に対して使われます。

   ,report
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

   ,"2 report
 0  1  2  3  4  5  6  7  8  9 10 11
12 13 14 15 16 17 18 19 20 21 22 23

   <@i. s=: 2 5 
 +---------+ 
 |0 1 2 3 4|
 |5 6 7 8 9|
 +---------+
   <@i."0 s
 +---+---------+
 |0 1|0 1 2 3 4|
 +---+---------+

二項動詞の場合は左側と右側のランクが指定できます。

   10 11 12 (,"0 1 ; ,"1 1 ; ,"1) 0 1 2
 +--------+--------------+--------------+
 |10 0 1 2|10 11 12 0 1 2|10 11 12 0 1 2|
 |11 0 1 2|              |              |
 |12 0 1 2|              |              |
 +--------+--------------+--------------+

副詞のb.(ビードット,ブール型)が関数や関数を定義する表現のランクについて分析するのに役立ちます。

   (# b. 0) ; (+/\ b. 0) ; (+/\ % #) b. 0
 +-----+-----+-----+
 |_ 1 _|_ 0 _|_ _ _|
 +-----+-----+-----+
 NB.意味不明?

演習:
20.1 ランク接続詞"(クオート)と一緒に使われた下記の単項動詞の結果を観察し、説明せよ。

a=: i. 3 4 5
<"0 a
<"1 a
<"2 a
<"3 a
< a
<"_1 a
<"_2 a
mean=: +/ % #
mean a
mean"1 a
mean"2 a

回答: <"kは<(小なりマーク、ボックス化)をランクkのそれぞれのセルに作用させます。 <"(#$a)は<aと同じ結果になります。さらに、kに負の値を用いるとaのランクからkの絶対値をマイナスしたランクについて実行されます。

20.2 以下の実験を行い接続詞@(アトマーク、アトップ)とa@:(アトマークコロン)の関係を明らかにし、ディクショナリーの結果と比較せよ。

(g=: <"2) a=: i. 3 4 5
. @: g a
. @ g a
: @: (<"1) a
: @ (<"1) a
答え: 関数|. @: gのランクはそれ自身無限なので|.(パイプドット、たてぼうドット)はリスト全体にかかることになりg a全体を逆転する結果になる。一方、関数f @ gはgのランクを受け継ぐため、|.(パイプドット、たてぼうドット)はアトムのひとつひとつに作用することになり、結果としてなにも起こらない。 20.3 以下の実験を行い、二項動詞におけるランク接続詞"(クオート)の使用について述べよ。
b=: 'ABC'
c=: 3 5 $ 'abcdefghijklmno'
c
b,c
b ,"0 1 c
b ,"1 1 c
b ,"1 c