プログラミングGaucheの練習問題(オブジェクト-外部表現文字列変換)

プログラミングGaucheの14.3の練習問題(P203)をしてみる。

write-to-string

オブジェクトを外部表現文字列にしたものを結果として返す手続き。
write手続きで文字列ポートへ書き込めば、call-with-output-stringがそのポートに書き込んだ内容を結果として返してくれる。
ということなので、以下のとおり。

(define (write-to-string  x )
  (call-with-output-string 
   (lambda (out)  (write x out) )
   )
)

read-from-string

外部表現文字列を引数に与えてオブジェクトを結果として返す。
read手続きで文字列を読み込み、その結果を返せばよいので(call-with-input-stringは引数の手続きの結果を結果として返す)、以下のとおり。

(define (read-from-string x)
  (call-with-input-string x
     (lambda (in)  (read  in) )
   )
)

で、以下のように試してみる。

(print (write-to-string  '(1 "abc" "\"" #\z )))
(define x (write-to-string  '(1 "abc" "\"" #\z )))
(print (read-from-string x) )
  • >
(1 "abc" "\"" #\z)
(1 abc " z)

write-to-stringの結果(結果出力1行目)は、外部表現で、read-from-stringの結果はオブジェクト(結果出力2行目)ということで、これでOKなのかな?