-
Notifications
You must be signed in to change notification settings - Fork 0
/
notes.tex
243 lines (156 loc) · 16.7 KB
/
notes.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
\extrapart{言語変化}
\subsection*{\rfivers との非互換性}
\label{incompatibilities}
本節は,本報告書と ``Revised$^5$ report''~\cite{R5RS} の間の非互換性を列挙する。
{\em 本リストは正式ではないが,正しく完全であると考えられる。}
\begin{itemize}
\item 大文字と小文字の区別は現在,シンボルと文字の名前でデフォルトである。
これは,次の仮定の下で書かれたコードを意味する。
ある文脈で書かれた {\cf FOO} または {\cf Foo} というシンボルと,別の分脈で書かれた {\cf foo} は,
新たな {\cf \#!fold-case} ディレクティブでマークされる,
または {\cf include-ci} ライブラリ宣言を使ってライブラリに含められる
のどちらかに変更することができる。
すべての標準的な識別子は全体が小文字である。
\item {\cf syntax-rules} コンストラクトは現在, {\em \_} (アンダースコア) をワイルドカードとして認識する。
これは,構文変数として使用することができないことを意味する。
それはまだ,リテラルとして使用することができる。
\item \rfivers 手続き {\cf exact->inexact} と {\cf inexact->exact} は,これらの名前がより短く,より正確であるように,
\rsixrs の名前 {\cf inexact} と {\cf exact} にそれぞれ名称変更された。
以前の名前は \rfivers ライブラリで引き続き利用可能である。
\item ({\cf string<?} および関連する述語による) 文字列比較は,({\cf char<?} および関連する述語による) 文字比較の辞書編集の拡張であることの保証は削除された。
\item 数値リテラル内の \# 文字のサポートは不要になった。
\item 指数マーカーとしての {\cf s}, {\cf f}, {\cf d}, および {\cf l} 文字のサポートは不要になった。
\item {\cf string\coerce{}number} の実装は,
引数が明示的な基数接頭辞を含んでいる場合 \schfalse{} を返すことはもはや許可されず,
{\cf read} およびプログラムの数値の構文との互換性がなくてはならない。
\item 手続き {\cf transcript-on} と {\cf transcript-off} は削除された。
\end{itemize}
\subsection*{\rfivers 以降の他の言語変化}
\label{differences}
本節は,本報告書と ``Revised$^5$ report''~\cite{R5RS} の間の追加の相違点を列挙する。
{\em 本リストは正式ではないが,正しく完全であると考えられる。}
\begin{itemize}
\item \rfivers における,様々なマイナーな曖昧さや不明瞭さは一掃された。
\item ライブラリは,カプセル化とコードの共有を改善するための新たなプログラム構造として追加された。
いくつかの既存および新規の識別子が,分離したライブラリに織り込まれている。
ライブラリは,制御された表出および識別子の名前変更とともに,他のライブラリやメインプログラムにインポートすることができる。
ライブラリの内容は,それが使用されるべき実装の機能を条件とすることができる。
\rfivers 互換ライブラリが存在する。
\item 式型 {\cf include}, {\cf include-ci}, および {\cf cond-expand} は, base ライブラリに追加された;
それらは対応するライブラリ宣言と同じ意味を持つ。
\item 例外は現在,{\cf raise}, {\cf raise-continuable} または {\cf error} で明示的に通知することができ,{\cf with-exception-handler} と {\cf guard} 構文で処理することができる。
任意のオブジェクトは,エラー状態を指定することができる;
{\cf error} によって通知された実装定義の条件は,それらを検出するための述語と, {\cf error} に渡される引数を取得するためのアクセス関数を持っている。
{\cf read} によって,およびファイルに関連した手続きによって通知される条件もまたそれらを検出するための述語を持っている。
\item 複数のフィールドへのアクセスをサポートする新しい分離的な型は, SRFI 9~\cite{srfi9} の {\cf define-record-type} を使用して生成することができる。
\item パラメータオブジェクトは, {\cf make-parameter} を使用して作成することができ, {\cf parameterize} を使用して動的に再束縛される。
手続き {\cf current-input-port} と {\cf current-output-port} は現在,新たに導入された {\cf current-error-port} がそうであるように,パラメータオブジェクトである。
\item 約束のサポートは, SRFI 45~\cite{srfi45} に基づいて拡張されている。
\item 0から255の範囲の正確整数のベクタであるバイトベクタは,新たな分離的な型として追加された。
ベクタ手続きのサブセットが提供される。
バイトベクタは,UTF-8文字エンコーディングに基づいて文字列との相互変換ができる。
バイトベクタはデータ表現を持っており,それ自身に評価される。
\item ベクタ定数はそれ自身に評価される。
\item 手続き {\cf read-line} は,行指向のテキスト入力を簡単にするために提供された。
\item 手続き {\cf flush-output-port} は,出力ポートバッファリングの最小の制御を可能にするために提供された。
\item ポートは現在,バイナリデータを読み書きするための新しい手続きとともに,{\em テキスト} または {\em バイナリ}ポートとして指定することができる。
新しい述語 {\cf input-port-open?} および {\cf output-port-open?} は,ポートが開いているか閉じているかを返す。
新しい手続き {\cf close-port} は現在のポートを閉じる; ポートが入力側と出力側の両方を有する場合,両方が閉じられる。
\item {\em 文字列ポート} は文字列の文字を読み書きする方法として,{\em バイトベクタポート} はバイトベクタのバイトを読み書きするために追加された。
\item 現在文字列とバイトベクタに固有のI/O手続きが存在する。
\item {\cf write} 手続きは現在,環状のオブジェクトに適用されたとき,データラベルを生成する。
新しい手続き {\cf write-simple} はラベルを生成することはない。
{\cf write-shared} は,すべての共有構造および環状構造にラベルを生成する。
{\cf display} 手続きは,環状オブジェクトでループしてはならない。
\item \rsixrs の手続き {\cf eof-object} が追加された。
EOFオブジェクトは現在,分離的な型であることが必須である。
\item 構文定義は現在,変数定義がどこにあっても許可されている。
\item {\cf syntax-rules} コンストラクトは現在,
省略符号をデフォルト {\cf ...} の代わりに明示的に指定することが許可され,
テンプレートが省略符号が接頭辞についたリスト用いてエスケープすることが許可され,
末尾パターンが省略符号パターンに続くことが許可されている。
\item {\cf syntax-error} 構文は,
マクロが展開された時点で,すぐにより有益なエラーを通知するための手段として追加された。
\item {\cf letrec*} 束縛コンストラクトが追加され,その点で内部 {\cf define} が指定された。
\item 複数の値を取得するためのサポートが {\cf define-values}, {\cf let-values}, および {\cf let*-values} で強化された。
式の列を含んでいる標準的な式型は,現在,列のすべての非終端式の継続にゼロまたは1個以上の値を渡すことを許可する。
\item {\cf case} 条件は現在, {\cf cond} に類似する {\tt =>} 構文を,正規句の中だけでなく, {\cf else} 句の中も同様にサポートしている。
\item 手続きに渡される引数の数での配布をサポートするために, {\cf case-lambda} が自身のライブラリに追加された。
\item 便利な条件 {\cf when} と {\cf unless} が追加された。
\item {\cf eqv?} の不正確数での振舞いは現在, \rsixrs の定義に準拠している。
\item 手続きに適用された場合, {\cf eq?} および{\cf eqv?} は異なる答えを返すことが許可されている。
\item \rsixrs の手続き {\cf boolean=?} と {\cf symbol=?} が追加された。
\item 正の無限大,負の無限大,NaN,負の不正確ゼロが,不正確値として
それぞれ表記表現 {\tt +inf.0}, {\tt -inf.0}, {\tt +nan.0}, and {\cf -0.0} で数値塔に追加された。
それらのサポートは必須ではない。
表現 {\tt -nan.0} は {\tt +nan.0} と同義である。
\item {\cf log} 手続きは現在,対数の底を指定する第2引数を受け取る。
\item 手続き {\cf map} と {\cf for-each} は現在,最も短い引数リストで終了する必要がある。
\item 手続き {\cf member} と {\cf assoc} は現在,使用する等号述語を指定するオプションの第3引数をとる。
\item 数値手続き {\cf finite?}, {\cf infinite?}, {\cf nan?}, {\cf exact-integer?}, {\cf square}, and {\cf exact-integer-sqrt} が追加された。
\item {\cf -} と {\cf /} 手続き,文字および文字列比較述語は現在,二つ以上の引数をサポートする必要がある。
\item 形式 \sharptrue{} と \sharpfalse{} は現在, \schtrue{} と \schfalse{} 同様にサポートされている。
\item 手続き{\cf make-list}, {\cf list-copy}, {\cf list-set!},
{\cf string-map}, {\cf string-for-each}, {\cf string->vector},
{\cf vector-append},
{\cf vector-copy}, {\cf vector-map}, {\cf vector-for-each},
{\cf vector->string}, {\cf vector-copy!}, and {\cf string-copy!}
は,列の操作を完成するために追加された。
\item 一部の文字列およびベクタの手続きは,オプションの \var{start} と \var{end} 引数を使用して,文字列またはベクタの部分処理をサポートする。
\item 一部のリスト手続きは現在,環状リストに定義されている。
\item 実装は, ASCII を含む完全な Unicode レパートリーの任意のサブセットを提供してもよいが,
実装は Unicode と一致する方法で,そのようなサブセットをサポートしなければならない。
これに応じて様々な文字と文字列の手続きが拡張されており,文字列に対して,大文字と小文字の変換手続きが追加された。
文字列の比較はもはや,単に Unicode のスカラ値に基づく文字比較と一致する必要はない。
新しい {\cf digit-value} 手続きが,数字文字の数値を取得するために追加された。
\item 2つの追加のコメント構文が存在する:
次のデータをスキップするための {\tt \#;} ,および入れ子が可能なブロックコメントのための {\tt \#| ... |\#} 。
\item データラベルが接頭辞に付いたデータ {\tt \#<n>=} は,共有構造を持つデータの読み書きを可能にし, {\tt \#<n>\#} で参照することができる。
\item 文字列および記号は現在,ニモニックと数値のエスケープシーケンスを可能にし,名前付き文字のリストが拡張された。
\item 手続き {\cf file-exists?} と {\cf delete-file} は, {\tt (scheme file)}ライブラリで利用可能である。
\item システム環境,コマンドライン,およびプロセス終了ステータスへのインタフェースは, {\tt (scheme process-context)} ライブラリで利用可能である。
\item 時間関連の値にアクセスするための手続きは, {\tt (scheme time)} ライブラリで利用可能である。
\item 異常が少ない整数除算演算子のセットは,新しくより明確な名前で提供されている。
\item {\cf load} 手続きは現在,ロード先の環境を指定する第2引数を受け取る。
\item {\cf call-with-current-continuation} 手続き現在,同義語 {\cf call/cc} を持つ。
\item read-eval-print ループの意味は現在,構文キーワードはしないが手続きの再定義を必要とする,遡及効果を持つことが部分的に規定されている。
\item 形式的意味論は現在,{\cf dynamic-wind} を操作する。
\end{itemize}
\subsection*{\rsixrs との非互換性}
本節では,\rsevenrs と``改訂$ ^6$レポート''~\cite{R6RS} およびそれに付随する標準ライブラリのドキュメントとの非互換性を列挙する。
{\em 本リストは正式ではなく,おそらく不完全である。}
\begin{itemize}
\item \rsevenrs ライブラリは,それらが構文的に \rsixrs ライブラリから区別できるようにするために,キーワード {\cf library} ではなく {\cf define-library} で始まる。
\rsevenrs の用語では, \rsixrs ライブラリの本体は,単一のエクスポート宣言に続いて,単一のインポート宣言,それに続くコマンドおよび定義で構成されている。
\rsevenrs では,コマンドおよび定義は,本体内で直接許可されていない: それらは {\cf begin} ライブラリ宣言に覆われなければならない。
\item {\cf include}, {\cf include-ci}, {\cf include-library-declarations}, または {\cf cond-expand} ライブラリ宣言に直接相当するものは, \rsixrs にはない。
一方, \rsevenrs ライブラリ構文は,位相またはバージョン仕様をサポートしていない。
\item ライブラリに標準化された識別子のグループ分けは, \rsixrs のアプローチとは異なる。
特に, \rfivers ではオプションの手続き,いずれか明示または暗示されることにより, base ライブラリから削除された。
base ライブラリ自体のみが絶対要件でである。
\item 識別子構文の形式は提供されない。
\item 内部構文定義は許可されているが,構文形式の使用は,その定義の前に現れることはできない。
\rsixrs で与えられた {\cf even}/{\cf odd} の例は許可されていない。
\item \rsixrs 例外システムはそのまま組み込まれたが,条件型が未規定のままになっている。
特に, \rsixrs が通知されるべき指定された型の条件を必要とする場合,
通知の未解決問題を残して, \rsevenrs は ``it is an error'' とだけ示す。
\item Unicode のフルサポートは必須ではない。
正規化は提供されていない。
文字の比較は, Unicode で定義されるが,文字列比較は実装依存である。
非 Unicode 文字は許可されている。
\item すべての数値塔は \rfivers では任意であるが, IEEE の無限大, NaN ,および {\mbox -0.0} のオプションサポートは \rsixrs から採用された。
数値結果のほとんどの明確化も採用されたが, \rsixrs の手続き {\cf real-valued?}, {\cf rational-valued?}, and {\cf integer-valued?} はそうではない。
\rsixrs 除算演算子 {\cf div}, {\cf mod}, {\cf div-and-mod}, {\cf div0}, {\cf mod0} および {\cf div0-and-mod0} は提供されていない。
\item 結果が未規定である場合,それはまだ単一の値であることが必須である。
しかし,本体内の非終端式は,任意の数の値を返すことができる。
\item {\cf map} と {\cf for-each} の意味は,SRFI 1~\cite{srfi1} 早期終了の振舞いを使用するように変更された。
同様に,{\cf assoc} と {\cf member} は \rsixrs の {\cf assp} と {\cf memp} 手続きを分離する代わりに,
SRFI 1 のようにオプションの{\cf equal?} 引数をとる。
\item \rsixrs {\cf quasiquote} の明確化は,複数の引数 {\cf unquote} と {\cf unquote-splicing} の例外とともに採用された。
\item 仮数部の幅を指定する \rsixrs の方法は採用されなかった。
\item 文字列ポートは, \rsixrs ではなく SRFI 6~\cite{srfi6} と互換性がある。
\item \rsixrs 形式のバイトベクタが含まれているが,符号なしバイト({\cf u8}) 手続きだけが提供された。
字句構文は, \rsixrs~{\cf \#vu8} 形式ではなく, SRFI 4~\cite{srfi4} との互換性のために {\cf \#u8} を使用する。
\item ユーティリティマクロ {\cf when} と {\cf unless} が提供されているが,その結果は未規定のままである。
\item 標準ライブラリドキュメントの残りの機能は,将来の標準化の努力に委ねられた。
\end{itemize}