APL/J言語:コンポジション(接続詞ベース)

APL/J言語:コンポジション(接続詞ベース)
数学において、よく ° が二つの関数を結びつけて新しい関数を作成する際の表示に使われる。f ° g yをf (g y)と定義する、などである。通常、そのようにして作られた関数の引数は一つのスカラーである。

J言語は、動詞をただ並べることによって作られるフックやフォークやその連結によってなされる関数の連結(コンポジション)以外に、5つの特別な接続詞を用いて関数の連結(コンポジション)を行います。すなわち& &. &: @ @:の5つの接続詞です。接続詞@と@:は&と&:と似た関係にあります。

接続詞&は、ランク0の二つのスカラー関数を一つのスカラー引数について用いた場合、数学において用いられる ° と最も似ています。ただ、二つの面で拡張されています。

1.10&^.(10をベースとしたログ)や^&3(キューブ)
一つの動詞と一つの名詞に使われた場合、10&^.(10をベースとしたログ)や^&3(キューブ)のような単項関数(monadic function)を作成する。
2.二つの動詞に使われた場合と、算術計算における単項動詞に使われた場合、二項動詞となり、x f&g y ↔ (g x) f (g y)で定義された動詞を作成する。たとえば、x %&! yはxとyのそれぞれの階乗の商を算出する。

接続詞&.は動詞のみに作用し、f&.gはf&gを行った後の結果にgの逆関数を作用する。

   3 +&^. 4
2.48491
   3 +&.^. 4
12
   ^.^:_1 (2.48491)
12
   ^1
2.71828
   ^1^2.48491
2.71828
   (^1)^2.48491
12

引数がスカラーの場合はf&:gとf&gは同じ結果になりますが、一般的な引数の場合は、動詞gはランクによって指定されたセルに作用します。f&gは結果のひとつひとつのセルにfを作用させるのに対し、f&:gは結果全体のセルにfを作用させます。

   (] ; %. ; |:&%. ; |:&:%.) i. 2 2 2
 +---+--------+-------+---------+
 |0 1|_1.5 0.5|_1.5  1|_1.5 _3.5|
 |2 3|   1   0| 0.5  0|   1    3|
 |   |        |       |         |
 |4 5|_3.5 2.5|_3.5  3| 0.5  2.5|
 |6 7|   3  _2| 2.5 _2|   0   _2|
 +---+--------+-------+---------+

接続詞@と&は単項動詞については同等です。

  f&g y ↔ f g y
  f@g y ↔ f g y
x f&g y ↔ (g x) f (g y)
x f@g y ↔ f (x g y)