成績計算


西川利男の本からですが、生徒ごとの平均点、教科ごとの平均点、総平均点を求めます。

 +-+------------------+
 | |国  数  英  理|
 +-+------------------+
 |A|72 68 80 71       |
 |B|65 57 75 62       |
 |C|63 48 78 68       |
 |D|80 62 73 65       |
 |E|58 66 72 70       |
 |F|90 88 80 82       |
 |G|83 66 75 73       |
 |H|68 60 78 68       |
 +-+------------------+
   seiseki
72 68 80 71
65 57 75 62
63 48 78 68
80 62 73 65
58 66 72 70
90 88 80 82
83 66 75 73
68 60 78 68

   (+/ % #)"1 seiseki
72.75 64.75 64.25 70 66.5 85 74.25 68.5
   (+/ % #) seiseki
72.375 64.375 76.375 69.875
   (+/ % #), seiseki
70.75

もとの本はAPLで書かれているのですが、やってみたら断然J言語の方が簡単だし、筋が通っています。
テーブル(マトリックス)多次元の数列を扱う場合、どの次元に動詞を作用させるかが問題になります。テーブルで言えば縦の合計か横の合計かという問題です。縦、横と考えるからテーブルにしか使えない考え方になってしまいますが、J言語では数列を統一的に要素の集合と考えます。テーブルならばrow(行、横)の集合がテーブル。3次元ならばテーブル(表)の集合が全体。まず"1とかのconjunction(接続詞)をつけないときはそのレベルで作用します。テーブルで言えば縦の合計、3次元ならば表の串刺し合計。"1とか"2とかをつけると順次そのレベルが上がっていってというか下がって行って、上記のように横の合計が取れるわけです。


最後の,(カンマ)は要素をatom(アトム)レベルで列挙する動詞です。


以上