Variable *DEBUG-IO*, *ERROR-OUTPUT*, *QUERY-IO*, *STANDARD-INPUT*, *STANDARD-OUTPUT*, *TRACE-OUTPUT*

UP


Variable *DEBUG-IO*, *ERROR-OUTPUT*, *QUERY-IO*, *STANDARD-INPUT*, *STANDARD-OUTPUT*, *TRACE-OUTPUT*

Variable *DEBUG-IO*, *ERROR-OUTPUT*, *QUERY-IO*, *STANDARD-INPUT*, *STANDARD-OUTPUT*, *TRACE-OUTPUT*

値の型

*standard-input*は、入力ストリーム
*error-output*, *standard-output*, *trace-output*は、出力ストリーム
*debug-io*, *query-io*は、双方向ストリーム

初期値

実装依存ですが、 開いたストリームでなければならず、 それはI/Oカスタマイズ変数に対する一般化されたsynonymストリームではなく、 あるI/Oカスタマイズ変数の値に対する一般化されたsynonymストリームの 可能性があります。 その初期値もまた一般化されたsynonymストリームであり、 *terminal-io*かその値のストリームかのどちらかを指します。

定義

これらの変数はまとめて標準化されたI/Oカスタマイズ変数と呼ばれます。 これらは、様々な標準化された操作と機能によって使われる入出力の 標準での宛先を変更するために、束縛と代入をすることができます。

*debug-io*の値は、デバッグI/Oと呼ばれ、 対話式のデバッグ機能を使うためのストリームです。

*error-output*の値は、エラー出力と呼ばれ、 警告と非対話式エラーメッセージが送られるべきストリームです。

*query-io*の値は、クエリ―I/Oと呼ばれ、 ユーザーの質問と返答を行うために使われる双方向ストリームです。 質問はこのストリームに出力され、 返信はこのストリームから読み込まれるべきです。

*standard-input*の値は、標準入力と呼ばれ、 多くの操作で入力ストリームが指定されなかったときに デフォルトの入力元として暗に指定されたものとして 利用されるストリームです。

*standard-output*の値は、標準出力と呼ばれ、 多くの操作で出力ストリームが指定されなかったときに デフォルトの出力元として暗に指定されたものとして 利用されるストリームです。

*trace-output*の値は、トレース出力と呼ばれ、 トレースを行う関数(traceを参照)と、 timeマクロによる出力によって印字されるストリームです。

例文

(with-output-to-string (*error-output*)
  (warn "this string is sent to *error-output*"))
=>  "Warning: this string is sent to *error-output*
" ;The exact format of this string is implementation-dependent.

(with-input-from-string (*standard-input* "1001")
   (+ 990 (read))) =>  1991                       

(progn (setq out (with-output-to-string (*standard-output*)
                    (print "print and format t send things to")
                    (format t "*standard-output* now going to a string")))
       :done)
=>  :DONE
out
=>  "
\"print and format t send things to\" *standard-output* now going to a string"

(defun fact (n) (if (< n 2) 1 (* n (fact (- n 1)))))
=>  FACT
(trace fact)
=>  (FACT)
;; もちろん、トレースの出力の書式は実装依存です。
(with-output-to-string (*trace-output*)
  (fact 3)) 
=>  "
1 Enter FACT 3
| 2 Enter FACT 2
|   3 Enter FACT 1
|   3 Exit FACT 1
| 2 Exit FACT 2
1 Exit FACT 6"

参考

*terminal-io*, synonym-stream, time, trace, 9. コンディション, 23. リーダー, 22. プリンター

備考

I/Oカスタマイズ変数の初期値に対する制限の意図は、 実装の柔軟性を過度に制限することなく、 これらの変数を別のI/Oカスタマイズ変数の値に束縛と代入することが 常に安全であることを保証ためです。

*debug-io**query-io*の初期値を同じストリームに、 *error-output**standard-output*の初期値を同じストリームにするような 実装が一般的です。

y-or-n-pyes-or-no-p関数は、 入出力にクエリ―I/Oを使用します。

通常のLisp read-eval-print-loopでは、入力は標準入力から行います。 多くの入力関数について、readread-charを含む関数は、 引数のデフォルトに標準入力のストリームを取ります。

通常のLisp read-eval-print-loopでは、出力は標準出力から行います。 多くの出力関数について、printwrite-charを含む関数は、 引数のデフォルトに標準出力のストリームを取ります。

例えば、あるプログラムは出力をファイルに対して行いたいときは *standard-output*を束縛することによって実施するべきです。 そうすることによって (*error-output**terminal-io*に束縛されているときは)、 *error-output*に送信されたエラーメッセージは、 通常望まれる形で、 *terminal-io*を経由してユーザーに届きます。


TOP, Github