たとえばこんなコード
(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