R6RS:翻訳:R6RS:E Language changes
変更点
本章では R5RS の発行後加えられた主な変更点について述べる。
- ソースコードでは Unicode の文字集合を使うようになった。特に、識別子に使うことのできる文字集合が飛躍的に大きくなった。
- 識別子を -> で始めることができるようになった。
- 識別子とシンボルで大文字・小文字を区別するようになった。
- 識別子、文字・真偽値・数値オブジェクトの外部表現、 `.' の間には区切りを入れなくてはならなくなった。
- # が区切り文字として扱われるようになった。
- バイトベクタのリテラルが追加された。
- 角括弧対を丸括弧対の同義語として使えるようになった。
- 入力構文の略記法が追加された。 #' = syntax、#` = quasisyntax、#, = unsyntax、#,@ = unsyntax-splicing。4.3.5 節を参照。
- # を数値表現の数字部分に使うことができなくなった。
- 数値オブジェクトの外部表現に仮数部の幅を含められるようになった。
- 非数と無限大のリテラルが追加された。
- 文字列と文字のリテラルで様々なエスケープシーケンスを使えるようになった。
- ブロックコメントとデータコメントが追加された。
- 本報告書に準拠した字句構文の目印として #!r6rs コメントが追加された。
- 文字は Unicode のスカラ値と対応づけられるものと規定された。
- 多くの手続きや構文フォームが (rnrs base (6)) ライブラリの一部となった。その他のライブラリに移動されたものもある。図 15 参照。
- 次の手続き・構文フォームが追加された。 letrec*, let-values, let*-values, real-valued?, rational-valued?, integer-valued?, exact, inexact, finite?, infinite?, nan?, div, mod, div-and-mod, div0, mod0, div0-and-mod0, exact-integer-sqrt, boolean=?, symbol=?, string-for-each, vector-map, vector-for-each, error, assertion-violation, assert, call/cc, identifier-syntax
- 次の手続きは削除された。 char-ready?, transcript-on, transcript-off, load
- 大文字・小文字の違いを捨象した文字列比較(string-ci=?, string-ci<?, string-ci>?, string-ci<=?, string-ci>=?)は、単純に対応する文字比較手続きから導かれる辞書式順序で比較するのではなく、大文字・小文字を同一視してから比較を行なう。
- 言語仕様にライブラリが追加された。
- 多くの標準ライブラリについて別個の報告書で述べるようになった。
- 「エラーである」とされていた多くの状態が明確になったか、振舞いが規定されるようになった。特に、多くは例外システムを使って規定されるようになった。
- Numerical tower の全体が必須になった。
- 超越関数の意味がより完全に規定された。
- 底 0 の expt の意味が変更された。
- syntax-rule フォームで、キーワードの部分に _ を使うことができるようになった。
- let-syntax と letrec-syntax の本体部分に、新しい環境を導入しないようになった。
- 非数や無限大をサポートする実装系では、それらの値に対する数値演算が IEEE 754 に適合するかたちで規定されるようになった。
- -0.0 を区別する実装系では -0.0 を考慮する数値演算の意味が IEEE 754 に適合するかたちで規定されるようになった。
- 実数オブジェクトの虚数部は正確な 0 であることになった。
- quasiquote の仕様が拡張された。入れ子になった quasiquote が正しく動作するようになり、 unquote や unquote-splicing が様々な対象に対して拡張された
- 手続きが場所を参照してもしなくてもよいようになった。そのため、以前は結果の規定されていた場合でも eqv? の結果が規定されない場合がある。
- quasiquote 構造の値の変更可能性がある程度規定された。
- dynamic-wind の before / after 手続きの動的環境が規定された。
- 副作用を持つだけの様々な式が、任意個数の値を返してもよいことになった。
- マクロ展開の順序や意味がより完全に規定された。
- 内部定義が letrec* を使って定義されるようになった。
- プログラム構造とトップレベルの概念がトップレベルプログラムとライブラリで置き換えられた。
- 宣言的意味論が、R5RS の言語の意味論に基いた操作的意味論に置き換えられた。
識別子 | 移動先 |
assoc | (rnrs lists (6)) |
assv | (rnrs lists (6)) |
assq | (rnrs lists (6)) |
call-with-input-file | (rnrs io simple (6)) |
call-with-output-file | (rnrs io simple (6)) |
char-upcase | (rnrs unicode (6)) |
char-downcase | (rnrs unicode (6)) |
char-ci=? | (rnrs unicode (6)) |
char-ci<? | (rnrs unicode (6)) |
char-ci>? | (rnrs unicode (6)) |
char-ci<=? | (rnrs unicode (6)) |
char-ci>=? | (rnrs unicode (6)) |
char-alphabetic? | (rnrs unicode (6)) |
char-numeric? | (rnrs unicode (6)) |
char-whitespace? | (rnrs unicode (6)) |
char-upper-case? | (rnrs unicode (6)) |
char-lower-case? | (rnrs unicode (6)) |
close-input-port | (rnrs io simple (6)) |
close-output-port | (rnrs io simple (6)) |
current-input-port | (rnrs io simple (6)) |
current-output-port | (rnrs io simple (6)) |
display | (rnrs io simple (6)) |
do | (rnrs control (6)) |
eof-object? | (rnrs io simple (6)) |
eval | (rnrs eval (6)) |
delay | (rnrs r5rs (6)) |
exact->inexact | (rnrs r5rs (6)) |
force | (rnrs r5rs (6)) |
inexact->exact | (rnrs r5rs (6)) |
member | (rnrs lists (6)) |
memv | (rnrs lists (6)) |
memq | (rnrs lists (6)) |
modulo | (rnrs r5rs (6)) |
newline | (rnrs io simple (6)) |
null-environment | (rnrs r5rs (6)) |
open-input-file | (rnrs io simple (6)) |
open-output-file | (rnrs io simple (6)) |
peek-char | (rnrs io simple (6)) |
quotient | (rnrs r5rs (6)) |
read | (rnrs io simple (6)) |
read-char | (rnrs io simple (6)) |
remainder | (rnrs r5rs (6)) |
scheme-report-environment | (rnrs r5rs (6)) |
set-car! | (rnrs mutable-pairs (6)) |
set-cdr! | (rnrs mutable-pairs (6)) |
string-ci=? | (rnrs unicode (6)) |
string-ci<? | (rnrs unicode (6)) |
string-ci>? | (rnrs unicode (6)) |
string-ci<=? | (rnrs unicode (6)) |
string-ci>=? | (rnrs unicode (6)) |
string-set! | (rnrs mutable-strings (6)) |
string-fill! | (rnrs mutable-strings (6)) |
with-input-from-file | (rnrs io simple (6)) |
with-output-to-file | (rnrs io simple (6)) |
write | (rnrs io simple (6)) |
write-char | (rnrs io simple (6)) |
図 15: ライブラリに移動された識別子