読者です 読者をやめる 読者になる 読者になる

きくらげ観察日記

好きなことを、適当に。

Gaucheのwriteのバグ(?)を発見した

Gauche

全角スペースはwriteでは||で囲われずに普通に表示されるのに、readでは半角スペースと同一の扱いでスキップされます。

gosh> (with-output-to-string (^() (write '| |))) ; 全角スペース
" "
gosh> (call-with-input-string "| |" read) ; ||で囲わないとreadできない
 

なので、シンボル| |(全角スペース)からなるS式をシリアライズしようとした場合、readで読み込めずにエラーになります。

(define s
  (with-output-to-string
    (^() (write '((hoge . 3)
                  (fuga . 2)
                  (| | . 1))))))
;; => "((hoge . 3) (fuga . 2) (  . 1))"

(with-input-from-string s
  (^()
    (read)))
;; => *** READ-ERROR: Read error at "(input string port)":line 1: bad dot syntax