たとえばこんなコード
(import (rnrs)
(rnrs mutable-strings (6)))
(define (print . args)
(for-each (lambda (arg)
(display arg))
args)
(newline))
(define (custom-read! bv start count)
(string-set! bv 0 #\a)
1)
(define (custom-write! bv start count)
(print bv)
1)
(define cp (make-custom-textual-output-port "id" custom-write! #f #f #f))
(print (put-string cp "string"))
(close-port cp)
これをmosh, Ypsilon, Petite Chez Schemeに食わせてみるmosh:
s
t
r
i
n
g
#
Ypsilon:
string
tring
ring
ing
ng
g
#
Petite Chez Scheme:
#
string
string
string
string
string
string
ちなみにPetiteは最後のclose-portがないと「string」が出力されない。ちなみに、write!のプロシージャーに渡されたstart、countもそれぞれバラバラで、moshは固定値「0,1」、Ypsilonはstartが0固定で後はsubstringしたかのような長さ、Petiteはstartとcountの合計値が文字列の長さになるようになってた。
(日本語が下手なので、詳しくは動かしてください)
これinput-portで作ってもそれぞれ実装がバラバラで、正直なんだこれ?状態。
いまいち使いどころが分からないし、とりあえず簡単そうな実装にしてしまおう。
No comments:
Post a Comment