R6RS における (string->symbol "0") の扱い
(write (string->symbol "0"))の結果を read する場合、そのまま 0 と write すると read 時に数値になって困る。R5RS ではこの辺りは決まっていなくて、Gauche では |0| と write する仕様になっている。
今日気付いたのだが R6RS においてはこのケースは \x30; と write されると決まっている。R6RS Rationaleに背景がひっそりと書かれているのだ。この辺り全く読んでない。
実装はどうしよう。
- read 時に inline hex escape は Unicode スカラとして読み込む。
- display 時は human readable にそのまま出力する。
- write 時にはまずそうな文字は inline hex escape で出力する。
問題は *まずそうな文字* の集合が分からない事だ。R6RS のどこかに書いてあるはず。探そう。