若葉のページ

tacit

K.E.IversonがJで導入した簡易でelegantな関数記述法。

bond atop

bond
&
数字とプリミティブを接続する。 \[ e^{1} , e^{ 2} , e^{3} \]
   1x1 ^ 1 2 3
2.71828 7.38906 20.0855
  
   ^&1 2 3 ] 1x1
2.71828 7.38906 20.0855
   
    1x1 1x2 1x3
2.71828 7.38906 20.0855
atop
@
プリミティブとプリミティブを 接続 \[ 2^{2}+3^{2}+4^{2} \] \[ \sqrt{ 2^{2}+3^{2}+4^{2}} \]
 (+/@:*:) 2 3 4
29
 
  %:@(+/)@:*: 2 3 4       NB. 関数型
5.38516
calc0=: 3 : ' %: +/ *: y' NB. 明示型
  
   calc0 2 3 4
5.38516

+/の(右)接続にはランクを外した@:を 用いる。

fork hook

fork \[ \dfrac{\sum x}{n}\] forkの単項を用いる \[ \begin{array}{ccc} &\%&\\ &\vert&\\ / & &\backslash\\ +/ & &\#\\ \vert & &\vert\\ y &&y\\ \end{array} \]
mean=: +/ % #            NB. 関数型
   

meane=:3 : '(+/y)% # y'  NB. 明示型
   
   mean >:i.10
5.5

   meane >:i.10
5.5
\[ \begin{pmatrix} \sum_{x}& \div&n\\ \end{pmatrix} \]
hook 残差を求める \[ x - \bar{x} \] \[ \begin{array}{ccc} &-&\\ / & &\backslash\\ \vert & &mean\\ \vert & &\vert\\ y &&y\\ \end{array} \]
   ] a=: >:i.5
1 2 3 4 5
   
   (- mean) i.5
_2 _1 0 1 2
train
  • プリミティブを4個、5個と並べるとTrainになる。
  • USの長距離貨物列車APLのイメージ。
  • 先ず右から3個(単位で)取る。残りが2個あればフォーク、1個ならフックになる
   (- +/ % #) >: i.5
_2 _1 0 1 2

   (*: - +/ % #) >: i.5
_2 1 6 13 22

   (*: -  mean) >: i.5
_2 1 6 13 22

(紛らわしいのでご注意)
Cap
[:
フォーク、フックの作用を止め、右から左の一般ルールに戻す
   ([: -  mean) >: i.5
_3
   ([: *: [: -  mean) >: i.5
9

Bondのエレガントな応用例