APL/J言語:副詞の定義

動詞や名詞と同様副詞も定義できます。

   a=:1 2 3 4 5
   prefix=: \
   < prefix 'abcdefg'
 +-+--+---+----+-----+------+-------+
 |a|ab|abc|abcd|abcde|abcdef|abcdefg|
 +-+--+---+----+-----+------+-------+

   +/ prefix a
1 3 6 10 15

さらに副詞の定義は/(スラッシュ)や\(バックスラッシュ、円マーク)のような副詞だけからではなく、接続詞と接続詞の引数を含んだ形で定義できます。

   IP=: /\   NB. Insert Prefix
   + IP a
1 3 6 10 15

   with3=: &3
   % with3 a
0.333333 0.666667 1 1.33333 1.66667

   ^ with3 a
1 8 27 64 125

   I=: ^: _1   NB. Inverse adverb
   *: I a
1 1.41421 1.73205 2 2.23607

   + IP I 1 3 6 10 15
1 2 3 4 5

   ten=: 10&
   ^. ten 5 10 20 100
0.69897 1 1.30103 2

   #. ten 3 6 5
365

   from=: -~ 
   into=: %~
   10 into 17 18 19
1.7 1.8 1.9

   10 from 17 18 19
7 8 9

   i=: "_1   NB. Apply to items
   {. i i. 3 4
0 4 8

演習:
15.1 副詞pow=: ^&とlog=: &^.を定義し、実行し、説明せよ。

   pow=:^&2   NB.powを二乗と定義する
   pow 81   NB.81の二乗は6561
6561
   log=: 10&^.  NB.logを10を底とするログと定義する
   log 100   NB.100のlogは2
2
   log pow 100   NB.100の二乗は10000、そのログは4。
4

15.2 以下の表現の意味を述べ、実行して確認せよ。

   +/~ i=: i. 6   NB.足し算テーブル
   ft=: /~   NB.関数テーブル副詞
   + ft i   NB.足し算テーブル
   ! ft i   NB.二項係数
   inv=: ^:_1   NB.逆関数副詞
   sub3=: 3&+ inv   NB.3をマイナスする関数
   sub3 i 
   +/~ i=: i. 6   NB.足し算テーブル
0 1 2 3 4  5
1 2 3 4 5  6
2 3 4 5 6  7
3 4 5 6 7  8
4 5 6 7 8  9
5 6 7 8 9 10
   ft=: /~   NB.関数テーブル副詞
   + ft i   NB.足し算テーブル
0 1 2 3 4  5
1 2 3 4 5  6
2 3 4 5 6  7
3 4 5 6 7  8
4 5 6 7 8  9
5 6 7 8 9 10
   ! ft i   NB.二項係数
1 1 1 1 1  1
0 1 2 3 4  5
0 0 1 3 6 10
0 0 0 1 4 10
0 0 0 0 1  5
0 0 0 0 0  1
   inv=: ^:_1   NB.逆関数副詞
   sub3=: 3&+ inv  NB.3をマイナスする関数
   sub3 i 
_3 _2 _1 0 1 2