,(カンマ)


APLでもJ言語でもデータを結びつけるのは,(カンマ)という動詞(関数)です。配列を連結するにはいろんなレベルの連結が考えられますが、J言語では"(クオート、ランクコンジャンクション、ランク接続詞)を使うことにより、若干わかりやすくなっています。

   'abc' , 'def'
abcdef
   ]a=:3 3$'abcdefghi'
abc
def
ghi
   ]b=:3 3$'123456789'
123
456
789
   a , b
abc
def
ghi
123
456
789
   a ,"1 b
abc123
def456
ghi789
   a ,"0 b
a1
b2
c3

d4
e5
f6

g7
h8
i9

この様に縦横だけでなく、要素のレベルまで自在に連結できます。単項動詞としての,(カンマ)はラベルと言って、全体を一気にベクトルに変えてくれるので、連結したものを新たに配列に組み直すこともできます。

   ,(a ,"0 b)
a1b2c3d4e5f6g7h8i9

ランクという概念で考えるより、たてとよこで考える場合は、,(カンマ)は縦連結,.(カンマドット)が横連結なので便利です。

   a ,. b
abc123
def456
ghi789

以上と別に,:(カンマコロン、ラミネート)という動詞があって、これはランクを増やして連結します。カンマとはちょっと考え方が違いますが、結構使われます。

   (,a) ,: (,b)
abcdefghi
123456789
   a ,: b
abc
def
ghi

123
456
789
   a ,:"1 b
abc
123

def
456

ghi
789
   a ,:"0 b
a
1

b
2

c
3

d
4

e
5

f
6

g
7

h
8

i
9

$(ドル、ダラー、シェイプ)で配列の形を確認すると、ランクが一段上がっていることが確認できます。

   $( (,a) ,: (,b))
2 9
   $(a ,: b)
2 3 3
   $(a ,:"1 b)
3 2 3
   $(a ,:"0 b)
3 3 2 1