APL/J言語:エラーとサスペンション
文の実行はエラーが起きると中止(サスペンド)します。エラーメッセージとコンテキスト情報が画面に出力されます。4つのブランクが構文解析が停止した場所を示します。以下に例を示しますが、サスペンションが起きるのは直接実行時だけでなく、スクリプトファイルの実行時、ユーザーが定義した動詞、副詞、接続詞の実行時にも起きます。
直接実行
2+'a'
スクリプトファイルの実行
t=: '2*3',(10{a.),'2+''a''',(10{a.),'2+3'
t NB.スクリプト
2*3
2+'a'
2+3
t 1!:2 <'test' NB.スクリプトファイルを書く
0!:011 <'test' NB.ファイルを実行する、エラー時に継続、ディスプレイ(011)
2*3
6
2+'a'
2+3
5
0!:001 <'test' NB.ファイルを実行する、エラー時に停止、ディスプレイ(001)
2*3
6
2+'a'
ユーザー定義動詞
g=: 3 : ('1+y' ; ':' ; '2+x+y')
3+g 'a'
13!:0 (1) NB.サスペンションを可能にする
3+g 'a'
domain error: g |
1 +y |
g[0] |
y NB.6スペースのインデントはサスペンションのしるし
a
y=. 12 NB.yのローカル値を再定義する
13!:4 '' NB.カレント行で実行を再開する
16 NB.再定義された値を使った結果
文は、中止(
サスペンド)した環境で、ローカル値を評価し、再実行することができます。エラーがサスペンションになるのは、フレーズ13!:0]1によってサスペンションを可能にしておく必要があります。サスペンション中はインプットプロンプトは6スペースです。
サスペンションと
デバッグ機能は付録(appendix)Aに書かれている13!:ファミリーでコントロールできます。エラーの完全なリストは付録Dにあります。