EusLispの標準の最上位レベルの入力−評価−出力のループ(loop)は、eustop により制御されている。 euslispが呼び出されたとき、 eustopは、ホームディレクトリから".eusrc"というファイルを あるいはEUSRC環境変数で指定されたファイルをロードする。 それから、euslispは、引き数リストで指定されたファイルをロードする。 これらのロードが終了後、eustopは、普通の対話セッション(session)に入る。
*standard-input*にユーザーのTTYが接続されたとき、 eustopは、*prompt-string*(デフォルトとして"eus$"が 設定されている)に設定されたプロンプトを出力する。 そして、*terminal-io*ストリームから命令を入力する。 もし、その入力がカッコで括られた行ならば、 evalによってlisp書式として扱われる。 もし、入力行の最初のsymbolに関数定義があった場合、その行に自動的に カッコが入れられ、評価される。 もし、関数定義が見つからなかった場合、その特殊値(special value)が 調査され、その値が出力される。 もし、そのsymbolになにも定義されてないならば、 その行はUNIX命令とみなされ、sh(Bourn's shell)へ渡される。 もし、shが一致するUNIX命令を捜せなかったとき、 "command unrecognized"というメッセージを出力する。 このように、eustopはlispのインタープリタおよびUNIXのシェルとして動作する。 もし、入力をUNIX命令として実行したくないとき、 行の最初にコンマ','を付ければよい。 これは、対話実行(interpretive execution)でエラーが発生したとき、 動的な値を見るときに役に立つ。 Euslispはローカルなスコープ(lexical scope)を採用しているので ローカル変数の値をspecialとして宣言されていない限りスコープの外から 調査することは出来ない。
入力は、それぞれ行番号とともに*history*ベクトルに記憶される。 cshの上と同じ様に!関数を入力することにより入力の詳細を 呼び出すことができる。 cshの履歴との違いは、!が関数であるため!の次に最低1つの スペースが必要である。 また、コントロールキーを用いることによりemacsのように対話的に 行を編集することができる。
通常^
D (EOF)でEuslispは終了する。
上位レベル(普通はcsh)に異常終了コードを返すためには、適当な条件コードをつけた
exitを使用すること。
eustopは、SIGINTとSIGPIPEのためにシグナルハンドラーを設定する。 そして、他のシグナルはcatchしない。 このため、SIGTERMやSIGQUITのようなシグナルでEuslispを終了できる。 終了を避けたいとき、これらのシグナルをcatchするためには、 unix:signal関数でユーザーで定義したシグナルハンドラーを設定すること。
euserror code message &rest arg [関数]
exit &optional termination-code [関数]
2016-04-05