APL/J言語:フレットとスクリプト

ホストコンピュータシステムは普通ラインフィード、またはキャリッジリターンの文字、J言語の表現では10{a.(a.は0〜255の文字、その内10番目の文字)または13{a.(または両方)を行区切りのフレットとして使います。フレットが0個または0個以上ある文字列のことをスクリプトと呼びます。

付録のAで詳しく述べられていますが、スクリプトはファイルに保存したり、ファイルから取り出したりできます。そのときの命令の形はt 1!:2 <'abc'、t=: 1!:1 <'abc'であり、実行は0!:11 <'abc'で実行できます。

スクリプトの便利な入力方法に: 0 : 0というフレーズがあります。これ以降のキーストロークは文字列として扱われます。通常の改行(enter)キーはフレットとして受け入れられ、スクリプトの終了は行頭の右かっこです。

   s=: 0 : 0
y*%:y
:
x*!y
)

   a. i. s   NB.インデックス10が改行マークです
121 46 42 37 58 121 46 10 58 10 120 46 42 33 121 46 10

スクリプトをボックス化したものやテーブル化したものは次のやり方で作ることができます。

   ]b=: <;._2 s   NB.改行をフレットとしてボックス化
 +-----+-+----+
 |y*%:y|:|x*!y|
 +-----+-+----+

   ]t=: >b
y*%:y
:
x*!y

仮にこうして作られたスクリプトをrとすると、rは定義に使えて、副詞の定義ならば(1 : r)、接続詞の定義ならば(2 : r)、動詞の定義ならば(3 : r or 4 : r)という形で用いられる。

   f=: 3 : s
   f 9   NB.スクリプトの中のコロンは単項動詞と二項動詞の分離につかわれている
27

   3 f 4   NB.スクリプトの中のxとyはそれぞれ左側と右側の引数である
72

以下のフレーズはそれぞれ副詞、接続詞、動詞の定義に使われる。

   a=: 1 : 0
   c=: 2 : 0
   v=: 3 : 0

ファイルやスクリプトはJ言語の原始動詞を補完するものとして、関数やその他の機能を定義している。どの程度一般的かに依存して二次関数とか三次関数と呼ばれることもある。