Easy Jは少し変な本ですが、いろいろ面白いです。
今回は第5章の「ボックスとレコード」についてです。
fname=.'Harry' sname=.'Potter' fpubl=.1998 shelfcode=.'childrens' (
テーブルについて、ボックスにして並べると横にならぶ。
m=.i.3 4 (
domain error |
( |
fname;sname;fpubl;shelfcode +-----+------+----+---------+ |Harry|Potter|1998|childrens| +-----+------+----+---------+ボックス化する動詞<(小なり記号)の逆の>(大なり記号)は、ボックスから中身を取り出し、配列に格納する。
>fname;sname;shelfcode Harry Potter childrensボックスは下記のように入れ子にできる。
rec1=.fname;sname;fpubl;shelfcode rec2=.'Jane';'Eyre';1847;'classics' (ラミネート,:(カンマコロン)を使うと縦にボックスをつなげることができる。縦につながったボックスにデータを加えるにはただのアペンド,(カンマ)で加えられる。
rec3=.'Peter';'Rabbit';'1904';'childrens' ds=.(rec1,:rec2),rec3 ds +-----+------+----+---------+ |Harry|Potter|1998|childrens| +-----+------+----+---------+ |Jane |Eyre |1847|classics | +-----+------+----+---------+ |Peter|Rabbit|1904|childrens| +-----+------+----+---------+ボックス自体も3x4のリストである。
#(rec1,:rec2),rec3 3 $(rec1,:rec2),rec3 3 4shelfcodeを取り出すためには、いったんトランスポーズ|.(たてぼうドット)してからフロム{(左ブレイス)すればよい。
scs=.3{|:ds scs +---------+--------+---------+ |childrens|classics|childrens| +---------+--------+---------+この中から子供向け'childrens'だけを取り出すには配列を作ってコピーする。
(scs=<'childrens')#ds +-----+------+----+---------+ |Harry|Potter|1998|childrens| +-----+------+----+---------+ |Peter|Rabbit|1904|childrens| +-----+------+----+---------+姓(surname => sname)のアルファベット順に並べるには昇順ソート/:(スラッシュコロン)を使う。
/:1{|:ds 1 0 2この結果で取り出せば目的の並べ替えができる。
(/:1{|:ds) { ds +-----+------+----+---------+ |Jane |Eyre |1847|classics | +-----+------+----+---------+ |Harry|Potter|1998|childrens| +-----+------+----+---------+ |Peter|Rabbit|1904|childrens| +-----+------+----+---------+