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 のどこかに書いてあるはず。探そう。