この規格ページの目次
81
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(standard-input) →<stream> 関数
(standard-output) →<stream> 関数
(error-output) →<stream> 関数
関数standard-inputは,入力関数の省略時ストリームとして使用されるストリームを返す。
関数standard-outputは,出力関数の省略時ストリームとして使用されるストリームを返す。
関数error-outputは,警告及びエラーメッセージのための省略時ストリームとして使用されるストリーム
を返す。
これらの関数が返す値は,初期状態では処理系定義であるが,動的に変更できる(with-standard-input,
with-standard-output及びwith-error-output参照)。
(with-standard-input stream-form form*) →<object> 特殊演算子
(with-standard-output stream-form form*) →<object> 特殊演算子
(with-error-output stream-form form*) →<object> 特殊演算子
これらの特殊形式は,まず引数stream-formを評価してストリームSを作り,次に対応する関数
(standard-input,standard-output又はerror-output)がストリームSを返す動的環境の中でその本体form*を
評価する。これらの特殊形式の返り値は,本体の最後のformを評価した結果(formがない場合は,nil)
とする。
例 (with-standard-input (create-string-input-stream "this is a string" )
(list (read) (read)))
⇒ (this is)
18.1 ファイルへのストリーム
ストリームは,ファイル又は入出力装置に接続されることがある。名前
が与えられると,その名前のファイルに接続されたストリームを作成することができる。ISLISPでは,名
前が付けられたファイルだけを取り扱う。
ファイル名 (file name) は,文字列で表現する。ファイル名の正しい構文は,処理系定義とする。
ファイルへのストリームは,open-input-file,open-output-file,open-io-file,with-open-input-file,
with-open-output-file又はwith-open-io-fileによって作成する。
(open-input-file filename [element-class]) →<stream> 関数
(open-output-file filename [element-class]) →<stream> 関数
(open-io-file filename [element-class]) →<stream> 関数
関数open-input-fileは,ファイルを入力専用に開く。関数open-output-fileは,ファイルを出力専用に開く。
関数open-io-fileは,ファイルを入出力用に開く。
filenameが文字列でない場合は,エラーが発生する(エラー名domain-error)。対応するファイルが,処
理系定義の方法で開かれる。これらの関数は,filenameで指定されたファイルに接続された<stream>クラス
のインスタンスを返す。
element-classは,要素の種類 (element class) であり,クラス<character>(省略時)であるか又は2進ス
トリームに用いられる1バイト中のビット数である正の整数のいずれかとする。すべての処理系は,8ビ
ットからなるバイト(整数0255を表現可能なバイト)を許さなければならないが,処理系によっては,
他のバイトサイズを許す場合がある。
備考 2進ストリームが使用された場合,バイト中のビットの順序及びワード中のバイトの順序(す
なわち,右から左か又は左から右か)は,それぞれ処理系定義とする。
――――― [JIS X 3012 pdf 86] ―――――
82
X 3012 : 1998 (ISO/IEC 13816 : 1997)
例 (open-input-file "example.lsp" 8) ⇒ 処理系定義
(with-open-input-file (name filename [element-class]) orm*) →<object> 特殊演算子
(with-open-output-file (name filename [element-class]) orm*) →<object> 特殊演算子
(with-open-io-file (name filename [element-class]) orm*) →<object> 特殊演算子
これらの特殊形式は,(それぞれopen-input-file,open-output-file又はopen-io-fileを使用して)ファイル
ヘのストリームを開き,form*を評価し,ファイルを閉じ,そして最後のformによって返される値(form
がない場合は,nil)を返す。
filename及びelement-classは,評価され,ファイルを開く関数に引数として渡される。ファイルを開く
ことによって作成されたストリームは,nameという名前の変数に(letが使用されたかのように)束縛さ
れる。したがって,識別子nameを使ってストリームを参照することができる。
これらの特殊形式の実行が終了する際に,その終了が正常かどうかにかかわらず,ストリームは閉じら
れる。この理由によって,ファイルを開閉する関数よりも,通常はこれらの特殊形式を使うことが多い。
例 (with-open-output-file (outstream "example.dat")
(format outstream "hello")) ⇒ nil
(with-open-input-file (instream "example.dat")
(read instream)) ⇒ hello
(close stream) →処理系定義 関数
関数closeは,ストリームstreamを閉じる。streamが閉じられた場合,入力操作又は出力操作に用いる
ことはできない。ファイルに対するstreamを閉じると,streamとそのファイルとの関係は終了する。stream
が既に閉じられていた場合,この関数は,何もしない。結果の値は,処理系定義とする。streamがストリ
ームでない場合は,エラーが発生する(エラー名domain-error)。
例 (defglobal input-str (open-input-file "data.lsp")) ⇒ input-str
(close input-str) ⇒ 処理系定義
(close input-str) ⇒ 処理系定義
(finish-output stream) →<null> 関数
関数finish-outputは,streamで指示される出力先への,保留中の出力を出す。保留中の出力が終わるま
で待ち,nilを返す。例えば,保留中の出力がバッファに格納されている場合,finish-outputは,ストリー
ムの行き先に出力するようバッファに命令する。streamが出力操作を扱えるストリームでない場合は,エ
ラーが発生する(エラー名domain-error)。
例 (defglobal output-str (open-output-file "data.lsp")) ⇒ output-str
(finish-output output-str) ⇒ nil
18.2 その他のストリーム
次の関数によって,ファイル以外のストリームを作成できる。
create-string-input-stream create-string-output-stream
文字列ストリームは,文字列に対するストリームとする。入力では,入力関数が,入力文字列から得ら
れる文字の並びからオブジェクトを生成する。出力では,出力関数が文字の並びを生成し,出力文字列に
格納する。
――――― [JIS X 3012 pdf 87] ―――――
83
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(create-string-input-stream string) →<stream> 関数
関数create-string-input-streamは,stringからの入力ストリームを作成し,それを値として返す。
stringが文字列でない場合は,エラーが発生する(エラー名domain-error)。
例 (let ((str (create-string-input-stream "this is a string")))
(list (read str) (read str) (read str)))
⇒ (this is a)
(create-string-output-stream) →<stream> 関数
関数create-string-output-streamは,文字列出力ストリームを作成し,それを値として返す。文字列ストリ
ームへの出力は,get-output-stream-stringによって取り出すことができる。
例 (let ((str (create-string-output-stream)))
(format str "hello")
(format str "world")
(get-output-stream-string str))
⇒ "helloworld"
(get-output-stream-string stream) →<string> 関数
関数get-output-stream-stringは,streamに対し,この関数の最後の呼出し以降出力されたすべての文字を
含む文字列を返す。この関数が以前にstreamを引数として呼び出されていない場合は,ストリームの作成
以降出力されたすべての文字を含む文字列を返す。streamがcreate-string-output-streamによって作成された
ストリームでない場合は,エラーが発生する(エラー名domain-error)。
例 (let ((out-str (create-string-output-stream)))
(format out-str "This is a string")
(let ((part1 (get-output-stream-string out-str)))
(format out-str "right!")
(list part1 (get-output-stream-string out-str))))
⇒ ("This is a string" "right!")
19. 入出力
19.1 入力関数の引数についての共通事項
入力を行う入力関数の多くは,引数を次のとおり扱う。
ストリームの終わりに到達した場合(すなわち,ストリームの最後の要素の次の要素を読み込もうとし
た場合),動作はeos-error-pの値(省略時値はt)に依存する。eos-error-pがnilであった場合は,入力関数
はeos-value(省略時値はnil)を返し,それ以外の場合はエラーが発生する(エラー名end-of-stream)。
input-streamが指定されていない場合は,標準入力ストリーム(関数standard-inputの返す値)を用いる。
input-streamが述語input-stream-pを満たさない場合は,エラーが発生する(エラー名not-an-input-stream)。
19.2 文字入出力
文字の入出力には,次の操作を用いる。文字入出力操作を扱えないストリームに対し,
これらの操作を行おうとした場合は,エラーが発生する。
(read [input-stream [eos-error-p [eos-value]]]) →<object> 関数
関数readは,ストリームinput-streamからISLISPオブジェクトのテキスト表現を読み込み,そのISLISP
――――― [JIS X 3012 pdf 88] ―――――
84
X 3012 : 1998 (ISO/IEC 13816 : 1997)
オブジェクトを返す。
input-stream,eos-error-p及びeos-valueの意味は,19.1による。
例 (defglobal str (create-string-input-stream "hello" #(1 2 3) 123 #\\A"))
⇒ str
(read str) ⇒ hello
(read str) ⇒ # (1 2 3)
(read str) ⇒ 123
(read str) ⇒ #\A
(read str nil "the end") ⇒ "the end”
(read-char [input-stream [eos-error-p [eos-value]]]) →<object> 関数
関数read-charは,input-streamから1文字を読み込み,これに対応する文字オブジェクトを返す。
input-stream,eos-error-p及びeos-valueの意味は,19.1による。
例 (defglobal str (create-string-input-stream "hi")) ⇒ str
(read-char str) ⇒ #\h
(read-char str) ⇒ #\i
(read-char str) エラーが発生する。
(preview-char [input-stream [eos-error-p [eos-value]]]) →<object> 関数
関数preview-charは,input-streamの次の文字を(もしあれば)返す。その文字は消費されない。つまり,
次にそのストリームから文字を読んだ場合には,同じ文字が現れる。
input-stream,eos-error-p及びeos-valueの意味は,19.1による。
例 (let ((s (create-string-input-stream "foo")))
(list (preview-char s) (read-char s) (read-char s)))
⇒ (#\f #\f #\o)
(read-line [input-stream [eos-error-p [eos-value]]]) →<object> 関数
関数read-lineは,input-streamから1行分の文字を読み込み,これを文字列として返す(行の最後の復帰
改行文字は含まない。)。次の復帰改行文字より前にストリームの終わりに到達した場合,終わりに到達す
るまでに読み込んだ行が空行でなかったときは,その行を返す。
input-stream,eos-error-p及びeos-valueの意味は,19.1による。
例 (with-open-output-file (out "newfile")
(format out "This is an example")
(format out "%")
(format out "look at the output file"))
⇒ nil
(defglobal str (open-input-file "newfile")) ⇒ str
(read-line str) ⇒ "This is an example"
(read-line str) ⇒ "look at the output file"
――――― [JIS X 3012 pdf 89] ―――――
85
X 3012 : 1998 (ISO/IEC 13816 : 1997)
(stream-ready-p input-stream) →真偽値 関数
関数stream-ready-pは,streamから次の要素を得ようとしたときに,処理系が待ち状態に入らない場合は
tを返し,それ以外の場合はnilを返す。streamが入力操作可能なストリームでない場合は,エラーが発生
する(エラー名domain-error)。
例 (with-open-output-file (out "testfile.dat")
(format out "This is an example")) ⇒ nil
(with-open-input-file (in "testfile.dat")
(stream-ready-p in)) ⇒ t
(format output-stream format-string obj*) →<null> 関数
(format-char output-stream char) →<null> 関数
(format-float output-stream float) →<null> 関数
(format-fresh-line output-stream) →<null> 関数
(format-integer output-stream integer radix) →<null> 関数
(format-object output-stream obj escape-p) →<null> 関数
(format-tab output-stream column) →<null> 関数
関数formatは,format-stringに従って印字をするという副作用をもつ。返り値は,nilとする。引数
outoput-streamが,述語output-stream-pを満たさない場合は,エラーが発生する(エラー名
not-an-output-stream)。format-stringが文字列でない場合は,エラーが発生する(エラー名domain-error)。
formatの書式指定を次に示す。ここで,objは,formatの引数obj*の中の,次に印字すべき引数を指す。
A
整形 (aesthetic) : objは,いかなるオブジェクトでもよい。objは,Sの場合と同様に印字さ
れるが,エスケープ文字は印字されない。文字は,変換されずに直接出力される。すなわち,
この書式指定が生成する出力は,人間が読むのに適している。
これは,(format-object output-stream obj nil) によって実装される。
B
2進 (binary) : objが整数でない場合は,エラーが発生する。objは,2進数で印字される。
これは,(format-integer output-stream obj 2) によって実装される。
C
文字 (character) : objが文字でない場合は,エラーが発生する。objは,変換されずに直接出
力される。
これは,(format-char output-stream obj) によって実装される。
D
10進 (decimal) : objが整数でない場合は,エラーが発生する。objは,10進数で印字される。
これは,(format-integer output-stream obj 10) によって実装される。
G
一般的な浮動小数点数 (general floating-point number) : objが数値でない場合は,エラーが発生
する。Objは,浮動小数点数として印字される。
これは,(format-float output-stream obj) によって実装される。
O
8進 (octal) : objが整数でない場合は,エラーが発生する。objは,8進数で印字される。
これは,(format-integer output-stream obj 8) によって実装される。
nR
基数 (radix) : objが整数でない場合は,エラーが発生する。objは,n進数 (2<n<36) で印字さ
れる。
――――― [JIS X 3012 pdf 90] ―――――
次のページ PDF 91
JIS X 3012:1998の引用国際規格 ISO 一覧
- ISO/IEC 13816:1997(IDT)
JIS X 3012:1998の国際規格 ICS 分類一覧
- 35 : 情報技術.事務機械 > 35.060 : 情報技術に使用される言語