用法 | APL | 結果と例(単項) | 用法 | 結果と例(両項) |
&
Bond ボンド (接続詞) u&n Y n&v Y Compose u&v Y |
動詞と数(名詞)、又は 数と動詞を接続して新たな動詞
を作る。
さらに 2つの動詞 を連結し動詞を作る。 2つの動詞が単項ときは u@v と同じ働きをする。 \[ \begin{array}{c} u\\ \vert \\ v\\ \vert \\ y \end{array} \] %&2 y=.1 2 3 4 0.5 1 1.5 2(yを2で割る) 2&% y 2 1 0.6666667 0.5 (2をyで割っている) +:&>: 5 NB. 2*(1+5) 12 +:@>: 5 (単項の@は同じ働き) 12 |
Compose
コンポーズ X u&v Y |
二項の動詞uと単項の動詞vを &連結した場合は、
その働きに注意が必要。
つまり x u&v yは (vx)u(vy)/のよう に作用する。 \[ \begin{array}{ccc} &u&\\ /&& \backslash\\ v&&v\\ \mid&&\mid\\ x&&y\\ \end{array} \] 100 -&+: 40 120 (+:100)-(+:40) 120 | |
&.
Under アンダー (接続詞) u&.v Y |
&
u&.vは、 u&vの後にvの逆演算を行なった結果を返す。
\[
\begin{array}{c}
v^{-1}\\
\vert\\
u\\
\vert \\
v\\
\vert \\
y
\end{array}
\]
+:&.>: 5 11 <:+:&>: 5 11 (>:^:_1)&+:&>: 5 11 >:^:_1 <: 「>:」の逆演算は「<:」 *&.> {@> i.5 +-+-+-+-+-+ |0|1|1|1|1| +-+-+-+-+-+ each &.> Boxを開いてuを適用して戻す |
&
Under
アンダー X u&.v Y |
&で結合させた演算の後で右動詞vの逆演算を行なった結果を返す。
\[
\begin{array}{ccc}
&v^{-1}&\\
&\vert& \\
&u&\\
/&& \backslash\\
v&&v\\
\mid&&\mid\\
x&&y\\
\end{array}
\]
100 -&.+: 40 60 -:(+:100)-(+:40) 60 +:^:_1(+:100)-(+:40) 60\[ \dfrac{(100 \times 2 ) - (40 \times 2)}{2} \] | |
&:
Appose アポーズ u&:v Y |
ランクが無限であることを除き &/と同じ働きをする。
+:&:>: 5 12 |
Appose
アポーズ X u&:v Y |
ランクが無限の場合で &/とほぼ同じ働き
100 -&:+: 40 120 (+:100)-(+:40) 120 |
用法 | APL | 結果と例(単項) | 用法 | 結果と例(両項) |
@
Atop アトップ (接続詞) u@v Y |
2つの動詞を関数合成により連結して動詞を作る。
2つの動詞が単項ならば u&vと同じ働きをする。 \[ \begin{array}{c} u\\ \vert \\ v\\ \vert \\ y \end{array} \] +:&>: 5 12 +:@>: 5 12 %&2 i.5 0 0.5 1 1.5 2 %@2 i.5 domain error 名詞、数値との連結の不可能な点が &と異なる。 |
Atop
アトップ (接続詞) X u@v Y |
単項の動詞uと二項の動詞vを @で連結した場合は、
その働きに注意が必要。
つまり x(u@v)yは u(xvy)のように作用する。 \[ \begin{array}{ccc} &u&\\ &\vert &\\ &v&\\ /&& \backslash\\ \vert &&\vert\\ x&&y\\ \end{array} \] 3 |@- 7 4 |(3-7) 4 | |
@:
At アット (接続詞) u@:v Y |
ランクが無限であることを除き 「@」と同じ働きをする。
+:@:>: 5 12「@」/は接続される直前の右のランクを継承するが @:は 継承しない。 @でうまく作動しない場合は @:に変えてみ るとよい場合がある。+/ には +/@:を用いる |
At
アット (接続詞) X u@:v Y |
@とほぼ同じ働き
100 +:@:- 40 120 3 |@:- 7 4 3 |&:- 7 _1 (-3)|(-7) _1 |
用法 | APL | 結果と例(単項) | 用法 | 結果と例(両項) |
Fork
フォーク (3連動詞) (f g h)Y |
Jの動詞(演算子)の連結では3つの動詞の結合(フォーク)
が最優先される。 ただ2つだけの場合はフックになる。 \[ \begin{array}{ccc} &g&\\ /&&\backslash \\ f&&h \\ \mid&&\mid \\ y&&y\\ \end{array} \] (+/%#)a=.1 2 3 4 5 3 |
Fork
フォーク X(f g h)Y |
\[
\begin{array}{ccccccc}
&&&g&&&\\
&&/&& \backslash&&\\
&&f&&h&&\\
&/&\backslash&&/&\backslash& \\
&x&y&&x&y&\\
\end{array}
\]
5 (+*-) 3 16 (5+3)*(5-3) 16 3 (+,-) 5 8 _2\[3 \pm 5\] 4つ以上の連結の場合には k fgh └─┘Fork └──┘Hook右から3個ずつの組み合わせて行ってフォークを作る。 最後が2個になればフックになる /td> | |
Hook
フック (2連動詞) (gh)Y |
二項動詞gと単項動詞hでは (g h )y はy g h(y)
のように演算する。
\[
\begin{array}{ccc}
&g&\\
/&&\backslash \\
y&&h \\
&&\mid \\
&&y\\
\end{array}
\]
(*-)3 _9 3 *(-3) _9 -(+/%#)\[ x-\bar{x} \] |
Hook
フック X(gh)Y |
単項の場合と同様で
x(g h)yは
x gh(y)と演算する。
\[
\begin{array}{ccc}
&g&\\
/&&\backslash \\
x&&h \\
&&\mid \\
&&y\\
\end{array}
\]
5(*-)3 _15 5 *(-3) _15 | |
[: Cap キャップ (動詞) < ([:gh)Y |
2連動詞の左端の単項動詞を
フックではなく(元に戻して右から順に)働かせたいときに
その左端に付けて、 「([: g h)y」又は x([: g h)y
の形で演算させ g{h(y)}, g(x h y)と同じ結果を与える。
Monad Dyad\[ \begin{array}{c|ccc} g&&g&\\ \vert &&\vert&\\ h &&h&\\ \vert&/&&\backslash\\ y&x&&y\\ \end{array} \] ([:*-)3 _1 *(-3) (片側の場合) _1 5([:*-)3 1 (両側の場合) *(5-3) 1 |
Cap
キャップ X [: Y |
単項又は二項関数の意図し
ない用法を排除する。
abs=.| : [: abs _4 0 5 4 0 5 3 | _4 0 5 4 0 5 3 abs _4 0 5 valence error | ] _4 0 5 4 0 5 これで単項に限定できたか思えるが、 3 | ] _4 0 5 4 0 5 のように左右に引数を入れ てもエラーにならない。 |
用法 | APL | 結果と例(単項) | 用法 | 結果と例(両項) |
\[ \sim \]
Reflexive 両側化 副詞 u~ Y |
二項動詞に$\sim$を付加すると、Yを左右の引数として両
側演算を行なう。
u~ y はy u yと同じ
/:~ 1 3 0 5 2 4 0 1 2 3 4 5 NB.upsort +~3 6 |
Passive
交換 副詞 X u~ Y |
u ~y は左右の引数を反対(交換)
にして演算を行なう。
1 2 3 -~ 4 5 6 3 3 3 (4 5 6)-(1 2 3) 3 3 3\[ \sim \] | |
~
Evoke 呼出し (接続詞) 'm' ~ Y |
ユーザー定義の動詞(代動詞)を名前で呼び出してその動詞
を実行させる。
'm'~ y は m yと同じ結果を与える。 sum=.+/ 'sum'~ i.5 10 |
用法 | APL | 結果と例(単項) | 用法 | 結果と例(両項) |
/
Insert 挿入 u / Y m / Y (副詞) |
動詞(u)の場合は、アイテム
間にuを挿入した演算と同等
ジェランド( u`v/)の場合は、u,v の各要素を右引数の各アイテ ムに指定順に挿入する。 +/ i.5 10 (0+1+2+3+4) */ >:i.5 120 NB.パイ関数 (1*2*3*4*5)\[ \sum , \Pi \] Y;(+/ Y);+/ "1 Y=.i.2 3 +-----+-----+----+ |0 1 2|3 5 7|3 12| |3 4 5| | | +-----+-----+----+ テーブル等の一般アレイには ランクで作用方向を指定する |
Table
一般外積 X u/ Y |
(>:i.5) */ table >:i.5 +--+-------------+ |*/|1 2 3 4 5| +--+-------------+ |1 |1 2 3 4 5| |2 |2 4 6 8 10| |3 |3 6 9 12 15| |4 |4 8 12 16 20| |5 |5 10 15 20 25| +--+-------------+tableは見出しを付ける関数 |
用法 | APL | 結果と例(単項) |
`
Tie (接続詞) u`v u`v u`m@. n`v@. u`v@. |
複数個の動詞を連結して動名詞(ジェランド)を作る。 スラッシュ (/)やオブリーク(/.) アジェンダ(@.)と共に用いる +`*/ i.6 29 0+1*2+3*4+5 29 +`%/ 3 1 4 3.25 3+1%4 3.25 (演算子を交互に挿入する) +:`*/. _2 3 _4 1 演算子を交互に作用させる。/.を用いる !`*: /. 3 4 5 6 16 120 順に(!3),(*:4),(!5)を求めている | |
`:
Evoke- Gerund m`:0 m`:3 m`:6 |
次の3タイプがあり、右引数により指定する。
\[
\begin{array}{cc|c}
m&`:0&Append\\
m&`:3&Insert\\
m&`:6&Train\\
\end{array}
\]
(+:`-:`*:`%:)`:(0) i.5 +: 0 2 4 6 8 -: 0 0.5 1 1.5 2 *: 0 1 4 9 16 %: 0 1 1.41421 1.73205 2 Append(演算子を逐一作用させる) +`* `:(3) i.5 14 (3)はInsertで交互に演算する +`*/ i.5と同じ +/`%`# `:(6) i.5 2 (+/%#)i.5 NB. mean 2 |
用法 | APL | 結果と例(単項) | 用法 | 結果と例(両項) |
@.
Agenda アジェンダ m@.v Y |
関数型の条件文でジェランドmを実行させる条
件を記述するときに用いる
a,: 2&| a a=. 2 3 4 5 6 7 (2&|)0 1 0 1 0 1 cond=. +:`-: @. (2&|) cond "0 a 4 1.5 8 2.5 12 3.5 条件文は()に入れる。ランク"0も必要 |
Agenda
アジェ ンダ X m@.v Y |
片側形の場合と同様 2 +`^ @. <3 8 2<3は真(1)なので、~ の方(2^3)を実行する 3 +`^@.< 2 5 (3+2)の方を実行する | |
^:
Power 反復 (接続詞) u^:n Y |
動詞uをn回実行する。
nは一般アレイでも構わない。 タシット型のループ >: ^:(3) i.6 3 4 5 6 7 8 >: ^:(i.3) i.6 0|0 1 2 3 4 5 1|1 2 3 4 5 6 2|2 3 4 5 6 7 (i.n)で経過を観察できる %:^:_1 i.5 0 1 4 9 16
|
Power
反復 X u^:n Y |
片側形と同じく反復演算 3 *^:3 i.5 0 3 27 54 81 108 3 *^:(i.5) 3 3 9 27 81 243 |
用法 | APL | 結果と例(単項) | |
Adverse
(接続詞) u::v |
u::v/の結果はエラーが
無ければuを、エラーのとき
は停止せずにvを実行する。
cf. try catch | ||
M.
Memo 記憶 | 反復計算で関数と結果をメモリーに 保存して効率を高める。(早くなる場合があるが効かない場合もある) (詳細は2章) | ||
$:
Self Reference 再帰 |
$:を用いた再帰
1:`(] * $:@<:)@.*5 120 */ >:i.5 120詳細は2章 | ||