next up previous contents index
: 文字の入出力 : 入出力関数 : 入出力関数   目次   索引

データの入出力

(read [〈ポート〉]) 【関数】

指定された 〈ポート〉 からデータを$1$つ読み込み,そのデータを返す. 〈ポート〉がend of file であれば,end-of-fileオブジェクトを返す.
(write 〈データ〉[〈ポート〉]) 【関数】

できるだけ再読み込み可能な形で 〈データ〉 を 〈ポート〉 に出力する. 〈データ〉 中に,印字名に特殊文字を含むような記号があれば, `` |''で囲み, `` |''または``\''を含む場合はその直前に``\''を出力する. 返す値は 〈データ〉 である.
(display 〈データ〉[〈ポート〉]) 【関数】

〈データ〉 を 〈ポート〉 に出力する. 〈データ〉 中に含まれる文字列は 前後のダブルクォートなしで出力し, 記号は印字名をそのまま出力し, 文字データは``#\''なしで出力する. それ以外のデータに対しては, writeと同じ出力をする. 返す値は 〈データ〉 である.
(print-circle 〈真偽値〉) 【関数】

write displayに対し, 印字中に同一のコンスまたは同一のベクタが現れるかかどうかを 検出するか(〈真偽値〉 が #tの場合) しないか(〈真偽値〉 が #fの場合)を指示する. TUTScheme起動時は,検出するモードになっている. print-circleは,以前のモードを真偽値として返す.

検出するよう指示されている場合, 同一のコンスが$2$回以上現われるときは, 最初にそのコンスを印字する直前に``#$n$=''を印字する. (ここで$n$はなんらかの整数であり, 異なったコンスには異なった整数が割り当てられる.) そして,$2$回目以降はそのコンスを印字するかわりに 同じ$n$を用いて``#$n$#''と印字する. 同一のベクタが$2$回以上現れる場合も同様である.

例えば,変数 xの値がリスト(a b c)のとき,

(set-cdr! (cdr x) x)

とすると xの値は循環リストとなる.


\begin{picture}(840,276)(0,-276)
\put(70,-23){\line(1,0){120}}
\put(250,-23){\li...
...put(300,-92){\makebox(20,46){a}}
\put(600,-92){\makebox(20,46){b}}
\end{picture}

これを単純に(検出しないモードで)印字すると,

(a b a b a b a b a b a b a b a b a b $\cdots$

と繰り返し,印字が終わらない. しかし,同一コンスの出現を検出するように指示されていれば, 図の左のコンス(car部が記号 aであるコンス)が2回以上現れるので,

#4126=(a b . #4126#)

と印字する. ここで``4126''は実際には別の整数かもしれない.



Tsuneyasu KOMIYA 平成14年2月22日