指定された 〈ポート〉 からデータを(write 〈データ〉[〈ポート〉]) 【関数】つ読み込み,そのデータを返す. 〈ポート〉がend of file であれば,end-of-fileオブジェクトを返す.
できるだけ再読み込み可能な形で 〈データ〉 を 〈ポート〉 に出力する. 〈データ〉 中に,印字名に特殊文字を含むような記号があれば, `` |''で囲み, `` |''または``(display 〈データ〉[〈ポート〉]) 【関数】\
''を含む場合はその直前に``\
''を出力する. 返す値は 〈データ〉 である.
〈データ〉 を 〈ポート〉 に出力する.
〈データ〉 中に含まれる文字列は
前後のダブルクォートなしで出力し,
記号は印字名をそのまま出力し,
文字データは``#\
''なしで出力する.
それ以外のデータに対しては, writeと同じ出力をする.
返す値は 〈データ〉 である.
(print-circle 〈真偽値〉) 【関数】
writeと displayに対し, 印字中に同一のコンスまたは同一のベクタが現れるかかどうかを 検出するか(〈真偽値〉 が #tの場合) しないか(〈真偽値〉 が #fの場合)を指示する. TUTScheme起動時は,検出するモードになっている. print-circleは,以前のモードを真偽値として返す.
検出するよう指示されている場合, 同一のコンスが回以上現われるときは, 最初にそのコンスを印字する直前に``#
=''を印字する. (ここで
はなんらかの整数であり, 異なったコンスには異なった整数が割り当てられる.) そして,
回目以降はそのコンスを印字するかわりに 同じ
を用いて``#
#''と印字する. 同一のベクタが
回以上現れる場合も同様である.
例えば,変数 xの値がリスト(a b c)のとき,
(set-cdr! (cdr x) x)
とすると xの値は循環リストとなる.
これを単純に(検出しないモードで)印字すると,
(a b a b a b a b a b a b a b a b a b
と繰り返し,印字が終わらない. しかし,同一コンスの出現を検出するように指示されていれば, 図の左のコンス(car部が記号 aであるコンス)が2回以上現れるので,
#4126=(a b . #4126#)
と印字する. ここで``4126''は実際には別の整数かもしれない.