ファイル名の解釈

ファイル名を引数としてとり、それに対して入出力を行う手続きにおいて、 そのファイル名として与えられた文字列に対して以下のような解釈を行う。
"pathname" 文字列の第一要素が #\< #\> #\| 以外のとき
文字列全体をファイルのパス名として解釈する。 出力手続きでファイルが既に存在した場合の動作について は規定しない。
"<pathname" 文字列の第一要素が #\< のとき
入力手続きに対して有効。文字列の2文字目以降を ファイルのパス名として解釈する。
">pathname" 文字列の第一要素が #\> で第二要素が #\> 以外のとき
出力手続きに対して有効。文字列の2文字目以降を ファイルのパス名として解釈する。ファイルが既に存在 した場合はそれに上書きする。
">>pathname" 文字列の第一要素が #\> で第二要素が #\> のとき
出力手続きに対して有効。文字列の3文字目以降を ファイルのパス名として解釈する。ファイルが既に存在 した場合はそれに追加する。
"|command" 文字列の第一要素が #\| のとき
文字列の2文字目以降をコマンド文字列として解釈する。 入力手続きに対してはその標準出力を読み込む。出力手続き に対してはその標準入力に書き込む。コマンドの終了 ステータスは rp:file-status (下記参照)で取得できる。

入力のための指定か出力のための指定かは手続きによって決まっているため、 パイプ記号は常に文字列の先頭に置かれる。この点で perl での指定方法と異なる ので注意。

一般

(gensym) procedure
(intern されない)symbol を生成する。
(rp:symbol-value symbol) procedure
シンボル symbol の(トップレベルの環境での)値。 これは他の lisp 方言でよくみられる属性リストを実現するなどの利用を 想定したものである。プログラム上の変数としての使用と rp:symbol-value での値の使用を混ぜることは推奨しない。
(rp:symbol-value-set! symbol value) procedure
シンボル symbol の(トップレベルの環境での)値に value をセットする。 rp:symbol-value の注意を参照のこと。
(rp:symbol-bound? symbol) procedure
シンボル symbol がトップレベルの環境で値を 持つなら #t を、そうでないなら #f を返す。
(eval expression) procedure
expression をトップレベルの環境で評価する。
(break [prompt]) procedure
read-eval-print ループを実行する。prompt は文字列、省略時 "break> "
(continue) procedure
最も内側の break ループから抜ける。通常のトップレベルではこれは pi の終了を意味する。 break ループの実行中でなければ変数 continue は未定義である。

マクロ

(rp:eval-in-compiler-environment expression) syntax
インタプリタでは expression が単に評価される。 トップレベルに置かれた場合、expression はコンパイル時に評価され、その副作用はコンパイル過程に影響を与える。
(rp:load-into-compiler-environment file) syntax
インタプリタでは (load file) と同じ。 トップレベルに置かれた場合、コンパイル時には file がコンパイラの環境に ロードされる。したがってその内容は出力コードに含まれるのではなく、 コンパイルそのものの過程に影響を与える。

システム環境

(exit [exit-code]) procedure
終了コード exit-code (省略時 0)で pi を終了する。
(system string) procedure
標準ライブラリの system() を実行し、その値を返す。
(getenv string) procedure
環境変数 string の値を返す。
(file-exists? string) procedure
string をその名前とするファイルが存在するとき #t,存在しないとき #f を返す。
*invocation-arg* global variable
プログラム名及びその引数からなるリスト。
(rp:command-line-arguments) procedure
起動時のコマンドラインを文字列からなるベクタとして返す。
(rp:time) procedure
#(real user sys) の形で起動時からの実行時間情報を返す。
(rp:errno) procedure
標準ライブラリの errno の値。
(rp:strerror errono) procedure
標準ライブラリの呼び出し strerror(errno) で得られる文字列。

エラー

(error [error-code]) procedure
エラーを発生させる。
(rp:catch-error procedure expression) syntax
エラーを捕獲する。
まず procedure を評価する。 これは1引数の手続きにならなけばならない。次に expression を評価し、その値を自身の値とする。 ただし expression の評価中にエラーが発生した場合、procedure
	(procedure error-code)
の形で呼び出され、その返す値が元の式の値とされる。 このエラー処理環境は continuation の一部をなすと考えられる。
(rp:call-with-error-handler error-proc thunk) procedure
(rp:catch-error procedure expression) は以下の式に展開するマクロとして実現されている。
	(rp:call-with-error-handler error-proc (lambda () expression))
(rp:error-message error-code) procedure
エラーメッセージを文字列として返す。
(rp:print-error-message error-code [port]) procedure
port (省略時 current-output-port) にエラーメッセージを出力する。

シグナル

(rp:set-signal-handler signal procedure) procedure
signal はシステムで可能なシグナル番号、 procedure は1引数の手続きあるいは #t または #f でなけばならない。 シグナル signal が発生すると procedure
	(procedure signal)
の形で呼ばれるようになる。この procedure 中で行えることについては特に制限はない。 procedure#t の時はデフォルトの処理に戻し、#f の時はシグナルを 無視するようにする。戻り値は元のシグナルハンドラとなる。
(rp:signal-message signal) procedure
シグナル signal に対するメッセージを文字列として返す。
(rp:print-signal-message signal [port]) procedure
port (省略時 current-output-port) にシグナルメッセージを出力する。

ポート

(rp:current-error-port) procedure
stderr に対応する出力ポートを返す。
(rp:set-current-input-port [port]) procedure
(rp:set-current-output-port [port]) procedure
それぞれ current-input-port, current-output-port を変更する。引数を省略すると起動直後の状態に戻す。
(open-input-string string) procedure
文字列 string から入力をとる入力ポートを返す。
(open-output-string) procedure
文字列に書き込む出力ポートを返す。
(get-output-string port) procedure
portrp:open-output-string で作られたポートでなければならない。その出力結果を文字列として取り出す。
(rp:open-input-procedure procs) procedure
入力ポートを返す。procs は4要素の vector である。 これを
	#(getchar ungetchar getlinecount char-readyp)
とする。それぞれの要素は手続きである。返されたポートから入力を行うと getchar が呼ばれる。
  	(getchar) => (char . procs')
procs'procs と同様の vector である(以下同様。)これを
  	#(getchar' ungetchar' getlinecount' char-readyp')
とする。 char が文字であればそれがポートから 入力された文字となる。数であればポートからの入力はエラーとなり、 その値がエラーコードとなる。#f であればポートは end-of-file の状態にあるものとされる。 次のポートに対する操作では procs' が使用される。
ungetchar は次のようにして呼ばれる。
  	(ungetchar char) => procs'
この時 (getchar') => (char . procs''), procs == procs'' となることが期待される。
getlinecount は次のようにして呼ばれる。
	(getlinecount) => (linecount . procs')
linecount は整数で、 getlinecount が呼ばれた時の行番号として扱われる。 ただし 0 の場合は行番号不明を意味するものとする。
char-readyp は次のようにして呼ばれる。
  	(char-readyp) => (ready? . procs')
ready? がブール値の場合、 それがポートに対する char-ready? の値とされる。 数であればそれをエラーコードとするエラーが発生する。

注: これらの手続きが呼ばれてリターンするまでの間、そのポートは使用できない。 従って特にエラーは発生すべきでない。エラーとなるべき状況は上記インター フェースを通して手続きを呼び出した機構に通知することになる。また、これらの 手続きが複数回リターンした場合の効果は予想できない。

(rp:open-output-procedure proc) procedure
出力ポートを返す。proc は手続きである。 返されたポートに出力を行うと proc が次のようにして呼ばれる。
	(proc char) => (result . proc')
char は出力する文字である。 result#t であれば出力が正常に行われたものとされ、 数であればそれをエラーコードとするエラーが発生する。 次のポートに対する操作では proc' が使用される。 rp:open-output-procedure に対する注が同様に適用される。
(rp:file-status port) procedure
portopen-output-file あるいは open-input-file から得られたものでない場合は エラーとなる。そうでない場合 port のクローズ時の状態によって以下のような値が返される。
#f まだクローズしていない
エラーが発生 クローズ操作(fclose, pclose)が -1 を返していた
整数値 クローズ操作(fclose, pclose)の戻り値(-1 以外)

デバッガサポート

(rp:apply-with-evaluator-hook hook-function procedure arguments)
(rp:hook-evaluator hook-function expression environment continuation)
(rp:call-evaluator expression environment)
(rp:top-level-environment)
(rp:expression->data expression environment)
(rp:hook-applicator hook-function procedure)
(rp:unhook-applicator procedure)
これらの手続きはここで充分に説明することはできない。 興味があれば dubugger.pi における step, trace 等の実現を調べられたい。 いずれ独立したドキュメントを用意するかもしれない。

インデックス